说起来邻接矩阵,对于学过线性代数的同学理解起来非常简单
其实就是一个数字组成方阵,每一个数字都能有有意义的代表一些信息。
下面来看一个例子
如上图所示的图,使用邻接矩阵存储的话应该是下面的情况
由此可见,邻接矩阵存储的无向图必定是对称的
如果是下面的有向图我们该如何表示呢
由行到列看,顶点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关:图的邻接矩阵存储及求邻接点操作 任务描述 本关任务:要求从文件输入顶点和边数据,包括顶点信息.边.权值等,编写程序实现以下功能. 1)构造无向网G的邻接矩阵和顶点集,即图的存储结构为邻接矩阵. ...

  2. 西南科技大学OJ题 邻接矩阵存储简单路径1070

    邻接矩阵存储简单路径 5000(ms) 10000(kb) 2197 / 4175 Tags: 邻接矩阵 假设无向图G采用邻接矩阵存储,设计一个算法,输出图G中从顶点u到v的所有简单路径. 输入 简单 ...

  3. 图的邻接矩阵存储及遍历

    图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图.一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息. 设图G有n个顶点,则邻接矩阵是一个n ...

  4. 数据结构—邻接矩阵存储法代码实现

    邻接矩阵法 图的邻接矩阵(adjacency matrix)是一种采用邻接矩阵数组表示顶点之间相邻关系的存储结构.设G=(V,E)是含有n(n>0)个顶点的图,各顶点的编号为0~(n-1),则G ...

  5. 图的邻接矩阵存储和邻接表存储定义方法

    一.邻接矩阵 #include <iostream> using namespace std; #define MaxVertexNum 100 //顶点最大数目//邻接矩阵存储结构 ty ...

  6. 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)

    邻接表存储的图 - DFS /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visi ...

  7. 图的邻接矩阵存储结构

    如上图,我们能够把v0标记为0,v1标记为1.... 并把联通的2点权值全设置为1,那么能够用邻接矩阵(右图)来表示 概念解析: 第一个邻接顶点: 我们以vo为例,第一个邻接顶点为V1(事实上也能够使 ...

  8. C语言 数据结构 图的邻接矩阵存储 基本操作(附输入样例和讲解)

    代码参照了严蔚敏.吴伟民编写的数据结构(C语言版). 部分内容参考了这位大佬: https://blog.csdn.net/jeffleo/article/details/53326648 所有代码采 ...

  9. 7.连连看的数据结构与算法(数组存储和图的邻接矩阵存储)。

    存储连连看地图可以用数组存储,也可以用把地图当做图来处理,用邻接矩阵来存储. 下面展示这两种方法的区别: 初始化图中边的算法思想: 其中有使用typedef语句定义数组类型https://www.cn ...

最新文章

  1. vue 分模块打包 脚手架_vue-cli分模块独立打包
  2. SCCM2012 R2实战系列之九:OSD(中)-- 捕获镜像
  3. 自动编译和提交脚本(结合svn和visual studio)
  4. WinForm程序设计-根据工具栏上按钮的标题调用不同的功能表单
  5. 需求分析阶段各种图的功能
  6. OPPO 正式发布 ColorOS 7,“轻”装上阵带来多项亮眼新功能……
  7. 纯CSS实现三列布局(两边固定,中间自适应)
  8. 手模手教你装 文能黑苹果,武可3A游戏大作的2400块主机
  9. 我国医院信息化的现状与发展策略
  10. 斯蒂文斯理工学院计算机科学硕士,斯蒂文斯理工学院计算机科学硕士
  11. 小红书怎么看关键词排名?如何提升笔记自然搜索排名
  12. html mui模板使用,mui + vue 模板
  13. 怎么在电脑上创建一个虚拟机
  14. python之seed()函数
  15. wr720n刷成网络打印_OPENWRT for TP-LINK TL-WR720N 4M-8M固件,含NAS、3G、Printer,支持3070和8187网卡 20120906 - V2EX...
  16. 前置++与后置++的不同
  17. C# Websocket连接(wss)
  18. nvm安装node,但npm和node不识别
  19. Vue的全局事件总线实现任意组件间通信
  20. 第一个超级计算机深蓝,为什么深蓝只是超级计算机,而Alpha GO是人工智能?

热门文章

  1. NOIP2015 pj
  2. 浙江海發進出口股份有限公司官网上线|LTD五金技术行业案例分享
  3. 【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
  4. Excel添加下拉按键自动填充颜色
  5. Word Rotator‘s Distance——WRD算法应用
  6. Java实现png图片转pdf
  7. 通过 JFR 与日志深入探索 JVM - 调试 JVM 的工具 WhiteBox API
  8. [创业-29]:雪崩与狗,创业者真实写照
  9. 漏洞工具包2015年态势回顾:规模与分布
  10. 微擎系统操作记实--公众号管理员权限设置