要用两个数组

图:AMGraph

一维数组vexs存储顶点信息,元顶点素类型这里是字符,所以定义为字符型char

数组中有多少个元素呢?取决于图中有多少个顶点。我们可以假设100

所以,我们定义这样一个一维数组,最多有100个元素,每个元素都是一个顶点,这就是顶点表

我们还需要二维数组存储这个邻接矩阵,它也是边,就用这个数组arcs【MVNum】【MVNum】,

有多少行多少列仍然取决于顶点的个数

数组中的元素类型是什么呢?是这个边的类型ArcType,我们可以假设这个边的值是整型,你也可以根据需要自己设置float等(不是网,图的话,不带权值,0和1也是整型;如果是网,就是无穷大和权值,总之他是一个整数)

我们还需要额外的一些值,比如当前的数组定义成这么大,但是这个数组有可能没有全用

我们可以自己定义顶点数自己用起来方便些,vexnum表示顶点数,arcnum表示总共有多少条边,他们的类型是整型。

如果是网,两个顶点之间没有边或弧,我们表示为无穷大,我们就可以用一个很大的数,权值不可能超过这么多,那我们就定义这个最大的整数,用他来表示无穷大

这就是邻接矩阵表示法,我们定义的存储结构:一个一维数组,一个二维数组,还有两个整数(分别表示图中的顶点数和边数),接下来的算法是把数组建起来

这里我们用无向网作为例子,看他的邻接矩阵怎么建立。

首先输入多少个顶点和多少个边,即为这两个变量vexnum和arcnum赋值,他们两个定了之后,顶点的一维数组的元素,邻接矩阵中每一个元素的值输入,的循环就定了

然后,我们依次输入顶点信息到顶点表中,我们先建立顶点表数组vexs[i]

邻接矩阵分两步,先初始化,用双重循环,把每一个元素的值都设定为极大值MaxInt,

然后构造邻接矩阵,有边的地方,设置他的权值,没边的地方,保留原来的无穷大

UDN:无向网,首先有这样的邻接矩阵表示的图的类型,叫做G:AMGraph &G

G有4个成员:顶点表,边表,顶点数目,边的数目

怎么操作这4个成员?G不是指针,所以我们用成员引用符.来引用,&G的&表示通过G带回返回值

第一步,先输入顶点数和边数存储好

第二步,建立顶点表vexs,即给一维数组赋值,有几个顶点呢?i从0到G.vexnum-1这个循环执行这么多次

第三步,建立邻接矩阵,分两步走,先初始:给邻接矩阵中所有的元素赋一个无穷大MaxInt

怎么赋呢?邻接矩阵是一个二维数组,所以我们需要一个双重循环,一行一行的来,总共有多少行呢?有多少个顶点就有多少行,每一行有多少个元素呢?有多少个顶点就有多少个元素

接下来,构造邻接矩阵:输入边的情况

这条边依附于哪两个顶点?这条边的权值是多少?所以,我们输入两个顶点和权值

接下来,给这个邻接矩阵中这个元素G.arcs[i][j]的值,赋值为权

顶点在顶底表中的下标是几呢?

查找,确定后,然后才能为元素赋值

所以我们用这个查找顶点,他的结果是得到我们当前输入的顶点在顶点表中的位置,即下标

具体怎么求呢?算法LocateVex(找输入顶点的下标):

给我一个邻接矩阵G,然后我在里面查找顶点u

怎么找?

就是在顶点表中看哪一个元素和我们当前的要查找的顶点一样,一个一个来看,从下标为0一直到n-1

如果一样u==G.vexs[i],我们就返回他的下标i;没有我们就返回-1

这条边依附于这两个顶点,他们的下标是多少,分别找出来,然后给邻接矩阵中这个下标值赋值为w

无向网和无向图是一样的,都是对称矩阵,我们把对称元素的值G.arcs[j][i]设置为和刚才与元素的值G.arcs[i][j]一样,或者直接写w

然后再反复下一个:

我们输入了若干条边,每一条边我们都找出来,这条边是针对哪两个顶点的

然后我们修改邻接矩阵中对应的元素值就好了,我们通过这个循环,循环次数取决于边G.arcnum的数目,把若干条边的信息都保存在邻接矩阵中了

如何建立无向网的邻接矩阵(算法)?要知道这条边关联的顶点的下标相关推荐

  1. 尾插法建立单链表的算法

    尾插法建立单链表的算法 实现代码: #include <iostream> #include <stdlib.h> using namespace std; #define m ...

  2. apriori算法c++_使用Apriori进行关联分析

    目录 1.名词概念 2.频繁项集发现 3.Apriori算法关联分析 4.代码实现 5.参考文章   通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章一个函数实现自 ...

  3. DPC创始人Bard:DPC公链基于dpos算法开发的一条支付公链

    DPC公链基于dpos算法开发的一条支付公链 一.技术 DPC公链由DP全球资产金融管理集团公司开发,开发于2019年,三年一直在提升链上速度及转账成本,目前已经达到链上每笔转账3.9秒左右,每笔手续 ...

  4. Open3D RANSAC算法拟合分割多条直线

    Open3D RANSAC算法拟合分割多条直线 Open3D是一个基于Python的可视化和三维数据处理库,它包含了一些现代计算机视觉算法和工具,使得对3D图像和点云数据进行处理变得更加轻松.在Ope ...

  5. Bentley-Ottmann算法:求N条线段的交点

    Bentley-Ottmann算法:求N条线段的交点 Bentley-Ottmann算法 算法复杂度 1. 使用暴力求解,遍历每一条线段 i ,固定 i 遍历 j 与 i 是否存在交点: 2. 此时我 ...

  6. c语言建立小根堆的算法,小根堆(Heap)的详细实现

    堆的介绍 Heap是一种数据结构具有以下的特点: 1)完全二叉树 2)heap中存储的值是偏序 Min-heap: 父节点的值小于或等于子节点的值 Max-heap: 父节点的值大于或等于子节点的值 ...

  7. 哈夫曼树建立与二叉树WPL算法以及相关例题

    目录 哈夫曼树静态数组形式建立 哈夫曼树二叉链表形式建立 求WPL 哈夫曼树编码解码 更新 哈夫曼树的建立有两种方式,一种是通过静态数组的方式来建立(这种方式比较简洁明了好理解),由于不想篇幅太长了, ...

  8. C语言:将邻接表转换成邻接矩阵算法

    题目 设计一个将邻接表转换成邻接矩阵的算法. 分析 初始时将邻接矩阵 g 中所有对应的元素值设置为 0,扫描邻接表 G 的所有单链表,通过第 i 个单链表查找顶点 i 的相邻结点 p,通过邻接矩阵 g ...

  9. matlab算法到fpga具体实例,在FPGA上建立MATLAB和Simulink算法原型

    芯片设计和验证工程师通常要为在硅片上实现的每一行RTL代码写出多达10行测试平台代码.验证任务在设计周期内可能会占用50%或更多的时间.尽管如此辛苦,仍有接近60%的芯片存在功能瑕疵,需要返工.由于H ...

最新文章

  1. java语言中数值自动转换的优先顺序
  2. unknown error 1130,unknown error 1045
  3. JAVA world转图片,将Kinect深度图像转换为真实世界坐标
  4. jq 通过标签名称获取标签_如何快速通过今日头条原创标签的审核?
  5. 二元函数图像生成器_常见的损失函数(loss function)
  6. python软件下载视频教程-Python视频教程下载:Python从入门到精通【传智播客】
  7. android.os.DeadObjectException的解决办法
  8. 求N!二进制中末尾1的位置(类似于求N!中有多少个5的问题)
  9. TCP数据报结构以及三次握手(图解)
  10. ISO9000 质量管理和质量保证系列国际标准
  11. YUV、RGB、RAW DATA 3种Sensor输出格式 详解
  12. xshell官方个人免费版申请下载使用
  13. SSM框架:MyBatis
  14. 开源 ASP.NET CMS
  15. memcmp的用法 详讲
  16. 华为交换机SSH配置
  17. gioneem5Android版本,金立M5 Plus(金立GN8001) 版本线刷包
  18. 【个人纪录 | 分割】
  19. 动量策略——yyds
  20. arm linux 指纹识别,基于ARM—Linux指纹识别系统的设计.pdf

热门文章

  1. Flannel 工作原理
  2. python pyodbc连接sql server数据库
  3. Chrome内核浏览器保存实验特性配置(://flags)的方法
  4. 2022大湾区碳中和峰会:大湾区碳中和低碳转型规划信息与技术指导
  5. 区块链+长三角一体化国家战略+科创板,上海向全球区块链行业发出邀请
  6. Unity Shader学习案例一: 流光效果
  7. Oracle数据库常用基本SQL语法
  8. 为什么每次升职加薪都没你的份?
  9. 数据库设计规范之三大范式
  10. 电脑怎么备份文件?含泪分享3种免费的方法