邻接矩阵无向图是指通过邻接矩阵表示的无向图。

上面的图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;}
}

该函数是通过读取用户的输入,而将输入的数据转换成对应的无向图。

完整代码:源代码

邻接矩阵无向图的介绍相关推荐

  1. 邻接矩阵用c语言,邻接矩阵无向图(一)之 C语言详解

    本章介绍邻接矩阵无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...

  2. 邻接矩阵有向图的介绍

    邻接矩阵有向图的介绍 邻接矩阵有向图是指通过邻接矩阵表示的有向图. 上面的图G2包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"<A,B>,< ...

  3. 数据结构之图:无向图的介绍与功能实现,Python——22

    无向图(Undigraph)的介绍 引入 生活中的图,有地图,集成电路板的图,可以看类似的看做是数据结构中的图 数据有"一对一","一对多"和"多对多 ...

  4. ACM模板--邻接矩阵 无向图 搜索算法

    /*** C++: 邻接矩阵表示的"无向图(Matrix Undirected Graph)"** @author judyge* @date 2014/04/19*/#inclu ...

  5. ACM模板--邻接矩阵 无向图

    /*** C++: 邻接矩阵表示的"无向图(List Undirected Graph)"** @author skywang* @date 2014/04/19*/#includ ...

  6. 邻接矩阵——无向图的实现

    无向图的邻接矩阵 需要n维矩阵和n个顶点集     因此结构体需要:         1,一个二维数组(长度都是顶点个数),用来表示矩阵          2,一个顶点集(用来保存顶点)        ...

  7. ACM模板--邻接矩阵 无向图 Prim Kruskal Dijkstra

    /*** C++: Dijkstra算法获取最短路径(邻接矩阵)** @author skywang* @date 2014/04/24*/#include <iomanip> #incl ...

  8. 有向图,无向图的邻接矩阵和邻接表模板

    图 图的定义 有向图 概念 模板 邻接矩阵 邻接表 无向图 概念 模板 邻接矩阵 邻接表 简单图 完全图 图的定义 图 GGG 由顶点集 VVV 和边集 EEE 组成,记为 G=(V,E)G=(V,E ...

  9. 【Matlab】根据图生成带权邻接矩阵,并求出最短路径

    目录 图的简介 无向图(Graph) 生成带权邻接矩阵 求两点最短路径 有向图(Digraph) 生成带权邻接矩阵 求最短路径 图的简介 图是拓扑学中的一个重要概念,分为无向图和有向图两种.图有两个重 ...

最新文章

  1. 比世界纪录快3倍 阿里云377秒完成100TB数据排序
  2. Spring学习10之动态代理
  3. 使用tomcat时,不用给webapps文件放入文件,直接访问项目方法
  4. 国内HuggingFace,预训练模型镜像使用
  5. 腾讯AI Lab正式开源业内最大规模多标签图像数据集
  6. egret3D与2D混合开发,画布尺寸不一致的问题
  7. 工作54:对ref的理解
  8. Java编写简单密码问题
  9. 【DevCloud · 敏捷智库】如何进行需求优先级管理?
  10. mysql 自定义函数教程_MySQL自定义函数
  11. 键盘快捷键将剪贴板内容粘贴到命令提示符窗口(Win XP)[关闭]
  12. 基于SSM的单点登陆01
  13. python正则表达式--爬取百度文库内容
  14. 软件工程学习笔记(全)
  15. Win10声卡驱动正常但没声音怎么办?驱动人生解决办法
  16. AES-128 加解密算法实现
  17. 如何一键批量转换Excel里面的“文本形式数字”为“数值型数字”
  18. 码云推荐 | 那些优秀的网络爬虫工具介绍
  19. 天梯赛 L2-032 彩虹瓶 (25 分)
  20. 大数据项目(基于spark)--新冠疫情防控指挥作战平台项目

热门文章

  1. 高中数学必修3知识点总结归纳:第一章算法初步
  2. acr122_ACR的完整形式是什么?
  3. python的环境配置
  4. 避免计算机中毒的方法,不再怕病毒 电脑中毒后的6招处理方法
  5. python写二进制文件 flush_文件操作 · python笔记 · 看云
  6. 计算机时钟是如何运行的?
  7. 2019年中国金融信息化软件开发企业排名
  8. openpyxl官方教程参考手册(翻译)
  9. 推荐一个单干网赚好站!BUXJOB - 生活至上,美容至尚!
  10. DSRN——Image Super-Resolution via Dual-State Recurrent Network