有向图-邻接表

2023-11-10

有向图邻接表,自我感觉比邻接矩阵要理解复杂一点,但是节省的空间不是小数目,所以虽然复杂,但是我们还是要优先考虑邻接表吧。
下面代码简单的写了邻接表,但是基本核心的代码全部包括了,之后图中加权的我也在代码中有所涉及,我们只要更一些参数就可以。基本符合所有要求了吧。

输入:

    4 5
    a b c d
    0 3
    1 0
    1 2
    2 0
    2 1

输出:

    邻接表
    a->3
    b->2->0
    c->1->0

代码:

#include <iostream>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100  
/* 最大顶点数,应由用户定义 */

using namespace std;

typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef char VertexType; /* 顶点类型应由用户定义 */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */

typedef struct EdgeNode /* 边表结点  */
{
    int adjvex;    /* 邻接点域,存储该顶点对应的下标 */
    EdgeType info;      /* 用于存储权值,对于非网图可以不需要 */
    struct EdgeNode *next; /* 链域,指向下一个邻接点 */
}EdgeNode;

typedef struct VertexNode /* 顶点表结点 */
{
    VertexType data; /* 顶点域,存储顶点信息 */
    EdgeNode *firstedge;/* 边表头指针 */
}VertexNode, AdjList[MAXVEX];

typedef struct
{
    AdjList adjList;
    int numNodes,numEdges; /* 图中当前顶点数和边数 */
}GraphAdjList;

/* 建立图的邻接表结构 */
void  CreateALGraph(GraphAdjList *G)
{
    int i,j,k;
    EdgeNode *e;
    cout << "输入顶点数和边数:" << endl;
    cin >> G->numNodes >> G->numEdges; /* 输入顶点数和边数 */
    cout << "读入顶点信息" << endl;
    for(i = 0;i < G->numNodes;i++) /* 读入顶点信息,建立顶点表 */
    {
        cin >> G->adjList[i].data;  /* 输入顶点信息 */
        G->adjList[i].firstedge=NULL;   /* 将边表置为空表 */
    }

    cout << "输入边(vi,vj)上的顶点序号:" << endl;

    for(k = 0;k < G->numEdges;k++)/* 建立边表 */
    {
        cin >> i >> j; /* 输入边(vi,vj)上的顶点序号 */
        e = new EdgeNode; /* 向内存申请空间,生成边表结点 */
        e->adjvex = j;                  /* 邻接序号为j */
        e->next=G->adjList[i].firstedge;    /* 将e的指针指向当前顶点上指向的结点 */
        G->adjList[i].firstedge = e;        /* 将当前顶点的指针指向e */
    }
}

void PrintfALGraph(GraphAdjList *G)
{
    EdgeNode *e;
    cout << "邻接表" << endl;
    for(int i = 0; i < G->numNodes;i++)
    {
        e = G->adjList[i].firstedge;
        if(e != NULL)
        cout << G->adjList[i].data << "->" ;
        while(e != NULL)
        {
            cout << e->adjvex;
            e = e->next;
            if(e != NULL) cout << "->";
        }
        cout << endl;
    }
}
int main(void)
{
    GraphAdjList G;
    CreateALGraph(&G);
    PrintfALGraph(&G);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有向图-邻接表 的相关文章

  • Linq - 从表达式 创建表达式

    我有一个谓词Expression
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include
  • 如何减少 MinGW g++ 编译器生成的可执行文件的大小?

    我有一个简单的 Hello world C 程序 在 Win XP 下由 MinGW g 编译器编译为 500kB 可执行文件 有人说这是由于iostream的库和静态链接libstdc dll Using s链接器选项有点帮助 减少了 5
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • C# 枚举到字符串自动转换?

    是否可以让编译器自动将我的 Enum 值转换为字符串 这样我就可以避免每次都显式调用 ToString 方法 这是我想做的一个例子 enum Rank A B C Rank myRank Rank A string myString Ran
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务

随机推荐

  • Python配置第三方库最全教程

    学Python最让人头疼的莫过于去配置一大堆杂乱的第三方库 而下载第三方库时报错也能让你崩溃 今天 我整理了一份全的教程 最常用的办法下载第三方库 在终端中执行 pip install 第三方库名称 大部分人一般不会报错 但偏偏我去安装最基
  • fbmem驱动框架分析

    文章目录 fbmem驱动框架分析 1 与misc驱动框架类比 1 1 my first cdev的记录 1 2 关于misc驱动框架的总结 2 fbmem驱动框架 2 1提供注册函数 2 2 操作函数分析 2 2 1 open函数分析 op
  • google analytics 添加跟踪代码

    google analytics添加跟踪代码实现统计分析 其代码添加方式共有三种 1 gtag js 基础代码
  • 个人网站搭建 04——WebHooks 实现远程项目的自动部署

    环境说明 Github 或 Gitee 维护的网站代码 支持 Webhooks 由于 Github 访问速度受限 易出现超时问题 我使用 Gitee 部署代码 Linux 公网服务器 阿里云 腾讯云 华为云等 服务器操作环境为 CentOS
  • Windows环境下 Redis RDB持久化无法生成dump.rdb文件

    Windows环境下 Redis RDB持久化无法生成dump rdb文件 问题 删除dump rdb文件 配置redis windows conf的SNAPSHOTTING 设置在60秒内进行了5次操作 即写入rdb文件中进行持久化保存
  • spring cloud 版本错Cannot resolve org.springframework.cloud:spring-cloud-starter-openfeign:unknown

    Cannot resolve org springframework cloud spring cloud starter openfeign unknown 说明 创建spring cloud项目后依赖错误 原因 版本错误 如下图 有些博
  • 怎么进入项目后台服务器,项目部署并常驻在服务器后台

    前言 上一次文章是自己的博客项目正式上线 这次分享 怎么让自己写好的项目常驻与服务器后台 在这之前 先了解一下服务器部署项目的一些环境依赖问题 服务器部署项目时 你的项目用到了什么环境 就要在服务器上安装相应的环境依赖 一般常要安装的就是M
  • 二进制颜色代码大全(含图)

    二进制颜色代码大全 可供大家开发时参考 FFFFFF DDDDDD AAAAAA 888888 666666 444444 000000 FFB7DD FF88C2 FF44AA FF0088 C10066 A20055 8C0044 FF
  • 如何证明凸函数的局部极小值为全局极小值

    最近上系统分析这门课的时候 老师提到了这个概念 当我们能够确定凸函数的局部最小值 这个最小值即为全局极小值 但并未给出证明 这里记录一下 主要用的还是凸函数的定义 凸函数区间任意位置的函数值小于两区间端点函数值之和
  • c#客户端Kafka的使用方法

    简介 Apache Kafka是一个分布式流处理平台 最初由LinkedIn开发 现在是Apache软件基金会的顶级项目之一 Kafka能够处理大规模的实时数据流 支持高可靠性 高可扩展性 低延迟和高吞吐量 它主要用于构建实时数据管道和流式
  • Pycharm debug 的使用

    Debug 作用的理解 若整个代码编写没有错误 且执行体没有设置断点时 Debug同正常运行模式 直接得到最终结果 当某一行代码设置断点后 在Debug模式下 代码会运行断点之前的所有程序 在断点处暂停 并在 变量窗口 可以查看所有主程序当
  • C#学习笔记:RadioButton控件与CheckBox控件的用法

    一 用途 1 RadioButton控件 单选按钮 当与其他单选按钮成对出现时 允许用户从一组选项中选择单个选项 也就是说 当同一个容器中 Form Panel GroupBox PictureBox等 存在两个以上的单选按钮时 只能有一个
  • C#对象和类--习题(1)

    1 一个景区根据游人的年龄收取不同价格的门票 请编写游人类 根据年龄段决定能够购买门票价格并输出 class XiTi string name int age void Xiti1 for 死循环 类似的while true Console
  • 代理模式——静态代理(贴近业务)

    静态代理概念 所谓静态也就是在程序运行前就已经存在代理类的字节码文件 代理类和委托类的关系在运行前就确定了 通常用于对原有业务逻辑的扩充 举例理解 以结婚为例 当事人只需要处理自己的主要事儿即可 比如典礼 洞房 其他的杂事儿可以交给代理公司
  • 乾坤实战教程

    一 什么是微前端架构 微前端不是单纯的前端框架或者工具 而是一套架构体系 这个概念最早在2016年底被提出 可以参考在Google上搜索Micro Frontends 排名靠前的http micro frontends org的博客文章 提
  • grpc arm 交叉编译(ubuntu 16.04)

    1 安装相关依赖工具 安装pkg config sudo apt get install pkg config 安装依赖文件 sudo apt get install autoconf automake libtool make g unz
  • Android:在争议中逃离Linux内核的GPL约束

    原文地址 http tech sina com cn s s 2012 05 28 09447177318 shtml 为这个题材起名 我思考了许久 GPL 是著名的开放源代码许可协议 Linux 内核开源项目正是在 GPL 的庇佑之下 十
  • 解读制造业数字化转型的现状及发展趋势

    智能制造系统现状 企业信息化建设三驾马车 ERP PDM与MES ERP管理的是企业的资源 比如人员 设备折旧等 PDM管理的是产品的设计过程 比如产品图纸 工艺等 MES管理的是制造的过程 比如生产计划 生产作业等 ERP是从客户开始 到
  • Python:后缀为whl的文件是什么?如何安装whl文件?

    whl格式本质上是一个压缩包 里面包含了py文件 以及经过编译的pyd文件 使得可以在不具备编译环境的情况下 选择合适自己的python环境进行安装 安装方法很简单 进入命令行输入 pip install xxxx whl 或者如果是升级
  • 有向图-邻接表

    有向图邻接表 自我感觉比邻接矩阵要理解复杂一点 但是节省的空间不是小数目 所以虽然复杂 但是我们还是要优先考虑邻接表吧 下面代码简单的写了邻接表 但是基本核心的代码全部包括了 之后图中加权的我也在代码中有所涉及 我们只要更一些参数就可以 基