如何建立无向网的邻接矩阵(算法)?要知道这条边关联的顶点的下标
要用两个数组
图: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的数目,把若干条边的信息都保存在邻接矩阵中了
如何建立无向网的邻接矩阵(算法)?要知道这条边关联的顶点的下标相关推荐
- 尾插法建立单链表的算法
尾插法建立单链表的算法 实现代码: #include <iostream> #include <stdlib.h> using namespace std; #define m ...
- apriori算法c++_使用Apriori进行关联分析
目录 1.名词概念 2.频繁项集发现 3.Apriori算法关联分析 4.代码实现 5.参考文章 通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章一个函数实现自 ...
- DPC创始人Bard:DPC公链基于dpos算法开发的一条支付公链
DPC公链基于dpos算法开发的一条支付公链 一.技术 DPC公链由DP全球资产金融管理集团公司开发,开发于2019年,三年一直在提升链上速度及转账成本,目前已经达到链上每笔转账3.9秒左右,每笔手续 ...
- Open3D RANSAC算法拟合分割多条直线
Open3D RANSAC算法拟合分割多条直线 Open3D是一个基于Python的可视化和三维数据处理库,它包含了一些现代计算机视觉算法和工具,使得对3D图像和点云数据进行处理变得更加轻松.在Ope ...
- Bentley-Ottmann算法:求N条线段的交点
Bentley-Ottmann算法:求N条线段的交点 Bentley-Ottmann算法 算法复杂度 1. 使用暴力求解,遍历每一条线段 i ,固定 i 遍历 j 与 i 是否存在交点: 2. 此时我 ...
- c语言建立小根堆的算法,小根堆(Heap)的详细实现
堆的介绍 Heap是一种数据结构具有以下的特点: 1)完全二叉树 2)heap中存储的值是偏序 Min-heap: 父节点的值小于或等于子节点的值 Max-heap: 父节点的值大于或等于子节点的值 ...
- 哈夫曼树建立与二叉树WPL算法以及相关例题
目录 哈夫曼树静态数组形式建立 哈夫曼树二叉链表形式建立 求WPL 哈夫曼树编码解码 更新 哈夫曼树的建立有两种方式,一种是通过静态数组的方式来建立(这种方式比较简洁明了好理解),由于不想篇幅太长了, ...
- C语言:将邻接表转换成邻接矩阵算法
题目 设计一个将邻接表转换成邻接矩阵的算法. 分析 初始时将邻接矩阵 g 中所有对应的元素值设置为 0,扫描邻接表 G 的所有单链表,通过第 i 个单链表查找顶点 i 的相邻结点 p,通过邻接矩阵 g ...
- matlab算法到fpga具体实例,在FPGA上建立MATLAB和Simulink算法原型
芯片设计和验证工程师通常要为在硅片上实现的每一行RTL代码写出多达10行测试平台代码.验证任务在设计周期内可能会占用50%或更多的时间.尽管如此辛苦,仍有接近60%的芯片存在功能瑕疵,需要返工.由于H ...
最新文章
- java语言中数值自动转换的优先顺序
- unknown error 1130,unknown error 1045
- JAVA world转图片,将Kinect深度图像转换为真实世界坐标
- jq 通过标签名称获取标签_如何快速通过今日头条原创标签的审核?
- 二元函数图像生成器_常见的损失函数(loss function)
- python软件下载视频教程-Python视频教程下载:Python从入门到精通【传智播客】
- android.os.DeadObjectException的解决办法
- 求N!二进制中末尾1的位置(类似于求N!中有多少个5的问题)
- TCP数据报结构以及三次握手(图解)
- ISO9000 质量管理和质量保证系列国际标准
- YUV、RGB、RAW DATA 3种Sensor输出格式 详解
- xshell官方个人免费版申请下载使用
- SSM框架:MyBatis
- 开源 ASP.NET CMS
- memcmp的用法 详讲
- 华为交换机SSH配置
- gioneem5Android版本,金立M5 Plus(金立GN8001) 版本线刷包
- 【个人纪录 | 分割】
- 动量策略——yyds
- arm linux 指纹识别,基于ARM—Linux指纹识别系统的设计.pdf