邻接矩阵无向图的介绍
邻接矩阵无向图是指通过邻接矩阵表示的无向图。
上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边。由于这是无向图,所以边(A,C)和边(C,A)是同一条边;这里列举边时,是按照字母先后顺序列举的。
上图右边的矩阵是G1在内存中的邻接矩阵示意图。A[i][j]=1表示第i个顶点与第j个顶点是邻接点,A[i][j]=0则表示它们不是邻接点;而A[i][j]表示的是第i行第j列的值;例如,A[1,2]=1,表示第1个顶点(即顶点B)和第2个顶点(C)是邻接点。
邻接矩阵无向图的代码说明
1. 基本定义
class MatrixUDG {private:char mVexs[MAX]; // 顶点集合int mVexNum; // 顶点数int mEdgNum; // 边数int mMatrix[MAX][MAX]; // 邻接矩阵public:// 创建图(自己输入数据)MatrixUDG();// 创建图(用已提供的矩阵)MatrixUDG(char vexs[], int vlen, char edges[][2], int elen);~MatrixUDG();// 打印矩阵队列图void print();private:// 读取一个输入字符char readChar();// 返回ch在mMatrix矩阵中的位置int getPosition(char ch);
};
MatrixUDG是邻接矩阵对应的结构体。
mVexs用于保存顶点,mVexNum是顶点数,mEdgNum是边数;mMatrix则是用于保存矩阵信息的二维数组。例如,mMatrix[i][j]=1,则表示"顶点i(即mVexs[i])"和"顶点j(即mVexs[j])"是邻接点;mMatrix[i][j]=0,则表示它们不是邻接点。
2. 创建矩阵
这里介绍提供了两个创建矩阵的方法。一个是用已知数据,另一个则需要用户手动输入数据。
2.1 创建图(用已提供的矩阵)
/** 创建图(用已提供的矩阵)** 参数说明:* vexs -- 顶点数组* vlen -- 顶点数组的长度* edges -- 边数组* elen -- 边数组的长度*/
MatrixUDG::MatrixUDG(char vexs[], int vlen, char edges[][2], int elen)
{int i, p1, p2;// 初始化"顶点数"和"边数"mVexNum = vlen;mEdgNum = elen;// 初始化"顶点"for (i = 0; i < mVexNum; i++)mVexs[i] = vexs[i];// 初始化"边"for (i = 0; i < mEdgNum; i++){// 读取边的起始顶点和结束顶点p1 = getPosition(edges[i][0]);p2 = getPosition(edges[i][1]);mMatrix[p1][p2] = 1;mMatrix[p2][p1] = 1;}
}
该函数的作用是利用已知数据来创建一个邻接矩阵无向图。 实际上,在本文的测试程序源码中,该方法创建的无向图就是上面图G1。具体的调用代码如下:
char vexs[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char edges[][2] = {{'A', 'C'}, {'A', 'D'}, {'A', 'F'}, {'B', 'C'}, {'C', 'D'}, {'E', 'G'}, {'F', 'G'}};
int vlen = sizeof(vexs)/sizeof(vexs[0]);
int elen = sizeof(edges)/sizeof(edges[0]);
MatrixUDG* pG;pG = new MatrixUDG(vexs, vlen, edges, elen);
2.2 创建图(自己输入)
/* * 创建图(自己输入数据)*/
MatrixUDG::MatrixUDG()
{char c1, c2;int i, p1, p2;// 输入"顶点数"和"边数"cout << "input vertex number: ";cin >> mVexNum;cout << "input edge number: ";cin >> mEdgNum;if ( mVexNum < 1 || mEdgNum < 1 || (mEdgNum > (mVexNum * (mVexNum-1)))){cout << "input error: invalid parameters!" << endl;return ;}// 初始化"顶点"for (i = 0; i < mVexNum; i++){cout << "vertex(" << i << "): ";mVexs[i] = readChar();}// 初始化"边"for (i = 0; i < mEdgNum; i++){// 读取边的起始顶点和结束顶点cout << "edge(" << i << "): ";c1 = readChar();c2 = readChar();p1 = getPosition(c1);p2 = getPosition(c2);if (p1==-1 || p2==-1){cout << "input error: invalid edge!" << endl;return ;}mMatrix[p1][p2] = 1;mMatrix[p2][p1] = 1;}
}
该函数是通过读取用户的输入,而将输入的数据转换成对应的无向图。
完整代码:源代码
邻接矩阵无向图的介绍相关推荐
- 邻接矩阵用c语言,邻接矩阵无向图(一)之 C语言详解
本章介绍邻接矩阵无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...
- 邻接矩阵有向图的介绍
邻接矩阵有向图的介绍 邻接矩阵有向图是指通过邻接矩阵表示的有向图. 上面的图G2包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"<A,B>,< ...
- 数据结构之图:无向图的介绍与功能实现,Python——22
无向图(Undigraph)的介绍 引入 生活中的图,有地图,集成电路板的图,可以看类似的看做是数据结构中的图 数据有"一对一","一对多"和"多对多 ...
- ACM模板--邻接矩阵 无向图 搜索算法
/*** C++: 邻接矩阵表示的"无向图(Matrix Undirected Graph)"** @author judyge* @date 2014/04/19*/#inclu ...
- ACM模板--邻接矩阵 无向图
/*** C++: 邻接矩阵表示的"无向图(List Undirected Graph)"** @author skywang* @date 2014/04/19*/#includ ...
- 邻接矩阵——无向图的实现
无向图的邻接矩阵 需要n维矩阵和n个顶点集 因此结构体需要: 1,一个二维数组(长度都是顶点个数),用来表示矩阵 2,一个顶点集(用来保存顶点) ...
- ACM模板--邻接矩阵 无向图 Prim Kruskal Dijkstra
/*** C++: Dijkstra算法获取最短路径(邻接矩阵)** @author skywang* @date 2014/04/24*/#include <iomanip> #incl ...
- 有向图,无向图的邻接矩阵和邻接表模板
图 图的定义 有向图 概念 模板 邻接矩阵 邻接表 无向图 概念 模板 邻接矩阵 邻接表 简单图 完全图 图的定义 图 GGG 由顶点集 VVV 和边集 EEE 组成,记为 G=(V,E)G=(V,E ...
- 【Matlab】根据图生成带权邻接矩阵,并求出最短路径
目录 图的简介 无向图(Graph) 生成带权邻接矩阵 求两点最短路径 有向图(Digraph) 生成带权邻接矩阵 求最短路径 图的简介 图是拓扑学中的一个重要概念,分为无向图和有向图两种.图有两个重 ...
最新文章
- 比世界纪录快3倍 阿里云377秒完成100TB数据排序
- Spring学习10之动态代理
- 使用tomcat时,不用给webapps文件放入文件,直接访问项目方法
- 国内HuggingFace,预训练模型镜像使用
- 腾讯AI Lab正式开源业内最大规模多标签图像数据集
- egret3D与2D混合开发,画布尺寸不一致的问题
- 工作54:对ref的理解
- Java编写简单密码问题
- 【DevCloud · 敏捷智库】如何进行需求优先级管理?
- mysql 自定义函数教程_MySQL自定义函数
- 键盘快捷键将剪贴板内容粘贴到命令提示符窗口(Win XP)[关闭]
- 基于SSM的单点登陆01
- python正则表达式--爬取百度文库内容
- 软件工程学习笔记(全)
- Win10声卡驱动正常但没声音怎么办?驱动人生解决办法
- AES-128 加解密算法实现
- 如何一键批量转换Excel里面的“文本形式数字”为“数值型数字”
- 码云推荐 | 那些优秀的网络爬虫工具介绍
- 天梯赛 L2-032 彩虹瓶 (25 分)
- 大数据项目(基于spark)--新冠疫情防控指挥作战平台项目
热门文章
- 高中数学必修3知识点总结归纳:第一章算法初步
- acr122_ACR的完整形式是什么?
- python的环境配置
- 避免计算机中毒的方法,不再怕病毒 电脑中毒后的6招处理方法
- python写二进制文件 flush_文件操作 · python笔记 · 看云
- 计算机时钟是如何运行的?
- 2019年中国金融信息化软件开发企业排名
- openpyxl官方教程参考手册(翻译)
- 推荐一个单干网赚好站!BUXJOB - 生活至上,美容至尚!
- DSRN——Image Super-Resolution via Dual-State Recurrent Network