图的邻接矩阵存储(简单代码实现)
说起来邻接矩阵,对于学过线性代数的同学理解起来非常简单
其实就是一个数字组成方阵,每一个数字都能有有意义的代表一些信息。
下面来看一个例子
如上图所示的图,使用邻接矩阵存储的话应该是下面的情况
由此可见,邻接矩阵存储的无向图必定是对称的
如果是下面的有向图我们该如何表示呢
由行到列看,顶点1到3是连同的,路径的权值是10,而顶点3到1是不连通的所以用数学中的无穷大进行表示。
我相信大家也能够看出来有向图和无向图的区别了
下面用代码来实现带权值的无向图的的存储
存储结构
typedef struct {char Vex[MAXSIZE]; //图中的顶点 int Edge[MAXSIZE][MAXSIZE]; //邻接矩阵 int vexnum,arcnum; //图中的顶点数和边的数量
}MGraph;
可以看出我们多用了一个数组vex进行存储结点的信息
构造生成方法
void CreateMGraph(MGraph *g){ //图的构造方法 int i,j,k,w;cout<<"请输入顶点数和边的数量"<<endl;cin>>g->vexnum >> g->arcnum;cout<<"请输入顶点的信息"<<endl;for(int i = 0;i<g->vexnum;i++){cin>>g->Vex[i];} for(i=0;i<=g->vexnum;i++){ //邻接矩阵初始化 for(j=0;j<=g->vexnum;j++) {if(i==j){g->Edge[i][j] = 0;}else{g->Edge[i][j] = Infinite;}}}for(k=0;k<g->arcnum;k++){ //读入每一条边的信息cout<<"请输入边的信息格式为(出发点,到达点,权值):"<<endl;cin>>i>>j>>w;g->Edge[i][j] = w;cout << g->Edge[i][j]<<endl;g->Edge[j][i] = g->Edge[i][j];}
}
打印输出邻接矩阵
void printGraph(MGraph *g) { //输出邻接矩阵cout<<"所有顶点信息"<<endl;for(int i = 0; i < g->vexnum;i++){ //输出所有的顶点的信息 cout<<g->Vex[i]<<" "; }cout<<endl;cout<<"输出邻接矩阵"<<endl;cout << " ";for(int i = 0; i < g->vexnum;i++){ //输出所有的顶点的信息 cout<<g->Vex[i]<<" "; }cout<<endl;int index = 0;for(int i = 1;i<=g->vexnum;i++){cout<<g->Vex[index++]<<" ";for(int j = 1;j<=g->vexnum;j++){if(g->Edge[i][j] == Infinite || g->Edge[i][j] == 0){cout<<"∞"<<" "; }else{cout<<g->Edge[i][j]<<" ";}}cout<<endl;}
}
主函数
int main()
{MGraph *G = new MGraph;CreateMGraph(G);printGraph(G);return 0;}
提醒!~!!!
这个程序里面顶点的信息请使用 1,2,3,4,5,…n来表示,否则会出现问题,小编确实注意到了这个问题,不过这个问题也不难解决,由于小编的时间不太多了,这里就不再进行修改。
最后把所有的代码贴上去
//图的邻接矩阵存储及其遍历方法
#include <iostream>
#define MAXSIZE 100
#define Infinite 10000
using namespace std;
typedef struct {char Vex[MAXSIZE]; //图中的顶点 int Edge[MAXSIZE][MAXSIZE]; //邻接矩阵 int vexnum,arcnum; //图中的顶点数和边的数量
}MGraph;void CreateMGraph(MGraph *g){ //图的构造方法 int i,j,k,w;cout<<"请输入顶点数和边的数量"<<endl;cin>>g->vexnum >> g->arcnum;cout<<"请输入顶点的信息"<<endl;for(int i = 0;i<g->vexnum;i++){cin>>g->Vex[i];} for(i=0;i<=g->vexnum;i++){ //邻接矩阵初始化 for(j=0;j<=g->vexnum;j++) {if(i==j){g->Edge[i][j] = 0;}else{g->Edge[i][j] = Infinite;}}}for(k=0;k<g->arcnum;k++){ //读入每一条边的信息cout<<"请输入边的信息格式为(出发点,到达点,权值):"<<endl;cin>>i>>j>>w;g->Edge[i][j] = w;cout << g->Edge[i][j]<<endl;g->Edge[j][i] = g->Edge[i][j];}
}void printGraph(MGraph *g) { //输出邻接矩阵cout<<"所有顶点信息"<<endl;for(int i = 0; i < g->vexnum;i++){ //输出所有的顶点的信息 cout<<g->Vex[i]<<" "; }cout<<endl;cout<<"输出邻接矩阵"<<endl;cout << " ";for(int i = 0; i < g->vexnum;i++){ //输出所有的顶点的信息 cout<<g->Vex[i]<<" "; }cout<<endl;int index = 0;for(int i = 1;i<=g->vexnum;i++){cout<<g->Vex[index++]<<" ";for(int j = 1;j<=g->vexnum;j++){if(g->Edge[i][j] == Infinite || g->Edge[i][j] == 0){cout<<"∞"<<" "; }else{cout<<g->Edge[i][j]<<" ";}}cout<<endl;}
} int main()
{MGraph *G = new MGraph;CreateMGraph(G);printGraph(G);return 0;}
图的邻接矩阵存储(简单代码实现)相关推荐
- 图的邻接矩阵存储及遍历操作
第1关:图的邻接矩阵存储及求邻接点操作 任务描述 本关任务:要求从文件输入顶点和边数据,包括顶点信息.边.权值等,编写程序实现以下功能. 1)构造无向网G的邻接矩阵和顶点集,即图的存储结构为邻接矩阵. ...
- 西南科技大学OJ题 邻接矩阵存储简单路径1070
邻接矩阵存储简单路径 5000(ms) 10000(kb) 2197 / 4175 Tags: 邻接矩阵 假设无向图G采用邻接矩阵存储,设计一个算法,输出图G中从顶点u到v的所有简单路径. 输入 简单 ...
- 图的邻接矩阵存储及遍历
图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图.一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息. 设图G有n个顶点,则邻接矩阵是一个n ...
- 数据结构—邻接矩阵存储法代码实现
邻接矩阵法 图的邻接矩阵(adjacency matrix)是一种采用邻接矩阵数组表示顶点之间相邻关系的存储结构.设G=(V,E)是含有n(n>0)个顶点的图,各顶点的编号为0~(n-1),则G ...
- 图的邻接矩阵存储和邻接表存储定义方法
一.邻接矩阵 #include <iostream> using namespace std; #define MaxVertexNum 100 //顶点最大数目//邻接矩阵存储结构 ty ...
- 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
邻接表存储的图 - DFS /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visi ...
- 图的邻接矩阵存储结构
如上图,我们能够把v0标记为0,v1标记为1.... 并把联通的2点权值全设置为1,那么能够用邻接矩阵(右图)来表示 概念解析: 第一个邻接顶点: 我们以vo为例,第一个邻接顶点为V1(事实上也能够使 ...
- C语言 数据结构 图的邻接矩阵存储 基本操作(附输入样例和讲解)
代码参照了严蔚敏.吴伟民编写的数据结构(C语言版). 部分内容参考了这位大佬: https://blog.csdn.net/jeffleo/article/details/53326648 所有代码采 ...
- 7.连连看的数据结构与算法(数组存储和图的邻接矩阵存储)。
存储连连看地图可以用数组存储,也可以用把地图当做图来处理,用邻接矩阵来存储. 下面展示这两种方法的区别: 初始化图中边的算法思想: 其中有使用typedef语句定义数组类型https://www.cn ...
最新文章
- vue 分模块打包 脚手架_vue-cli分模块独立打包
- SCCM2012 R2实战系列之九:OSD(中)-- 捕获镜像
- 自动编译和提交脚本(结合svn和visual studio)
- WinForm程序设计-根据工具栏上按钮的标题调用不同的功能表单
- 需求分析阶段各种图的功能
- OPPO 正式发布 ColorOS 7,“轻”装上阵带来多项亮眼新功能……
- 纯CSS实现三列布局(两边固定,中间自适应)
- 手模手教你装 文能黑苹果,武可3A游戏大作的2400块主机
- 我国医院信息化的现状与发展策略
- 斯蒂文斯理工学院计算机科学硕士,斯蒂文斯理工学院计算机科学硕士
- 小红书怎么看关键词排名?如何提升笔记自然搜索排名
- html mui模板使用,mui + vue 模板
- 怎么在电脑上创建一个虚拟机
- python之seed()函数
- wr720n刷成网络打印_OPENWRT for TP-LINK TL-WR720N 4M-8M固件,含NAS、3G、Printer,支持3070和8187网卡 20120906 - V2EX...
- 前置++与后置++的不同
- C# Websocket连接(wss)
- nvm安装node,但npm和node不识别
- Vue的全局事件总线实现任意组件间通信
- 第一个超级计算机深蓝,为什么深蓝只是超级计算机,而Alpha GO是人工智能?