【大话数据结构C语言】38 图的存储结构(邻接矩阵)
我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,转载请注明出处
因为图人任意两点之间都可能存在联系,所以无法用数据元素在内存中的物理位置表示元素之间的关系
因此将数组和链表的特性结合在一起才能更好的存放
比如下面四张图其实是一个图
临接矩阵(无向图)
我们可以设置两个数组,顶点数组为vertex[4]={V0,V1,V2,V3},边数组arc[4][4]为对称矩阵(0表示不存在顶点间的边,1表示顶点间存在边)。
对称矩阵:所谓对称矩阵就是n阶矩阵的元满足a[i][j]=a[j][i](0<=i,j<=n)。即从矩阵的左上角到右下角的主对角线为轴,右上角的元与左下角相对应的元全都是相等的
邻接矩阵(有向图)
无向图的边构成了一个对称矩阵,貌似浪费了一半的空间,那如果是有向图来存放,会不会把资源都利用得很好呢?
可见顶点数组vertex[4]={V0,V1,V2,V3},弧数组arc[4][4]也是一个矩阵,但因为是有向图,所以这个矩阵并不对称,例如由V1到V0有弧,得到arc[1][0]=1,而V0到V1没有弧,因此arc[0][1]=0。
另外有向图是有讲究的,要考虑入度和出度,顶点V1的入度为1,正好是第V1列的各数之和,顶点V1的出度为2,正好是第V1行的各数之和。
实践代码:
// 时间复杂度为O(n+n^2+e)#define MAXVEX 100 // 最大顶点数
#define INFINITY 65535 // 用65535来代表无穷大typedef struct
{char vexs[MAXVEX]; // 顶点表int arc[MAXVEX][MAXVEX]; // 邻接矩阵int numVertexes, numEdges; // 图中当前的顶点数和边数
} MGraph;// 建立无向网图的邻接矩阵
void CreateMGraph(MGraph *G)
{int i, j, k, w;printf("请输入顶点数和边数:\n");scanf("%d %d", &G->numVertexes, &G->numEdges);for( i=0; i < G->numVertexes; i++ ){scanf("%c", &G->vexs[i]);}for( i=0; i < G->numVertexes; i++ ){for( j=0; j < G->numVertexes; j++ ){G->arc[i][j] = INFINITY; // 邻接矩阵初始化}}for( k=0; k < G->numEdges; k++ ){printf("请输入边(Vi,Vj)上的下标i,下标j和对应的权w:\n"); // 这只是例子,提高用户体验需要进行改善scanf("%d %d %d", &i, &j, &w);G->arc[i][j] = w;G->arc[j][i] = G->arc[i][j]; // 是无向网图,对称矩阵}
}#include<stdio.h>int main() {
int i;for(i=1;i<=9;i++) {int j;for(j=1;j<=i;j++) {printf("%d*%d=%2d ",i,j,i*j);}printf("\n");}return 0;
}
【大话数据结构C语言】38 图的存储结构(邻接矩阵)相关推荐
- 数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念
图的存储结构 1.邻接矩阵 1.1有向图 1.2无向图 2.邻接表法 2.1有向图边表 2.2无向图边表 3.十字链表 4.临界多重表 十字链表与临界多重表 1.邻接矩阵 邻接矩阵法结点数为n的图G ...
- 7.2图的存储结构(邻接矩阵)
邻接矩阵(无向图) 因为图是由顶点和边或弧组成的,所以最好是把他们分开存储. 下面来看无向图的邻接矩阵. 图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图. 如下图所示: ...
- 20.0、C语言数据结构——图的存储结构
20.0.C语言数据结构--图的存储结构 图的存储结构相比较线性表与树来说就复杂很多了: 1. 我们回顾下,对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放:树结构是一对多的关系,所以我 ...
- 《大话数据结构》读书笔记-图
写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书,如有侵权,请联系删除. 文章目录 7.2 图的定义 7.2.1 各种图定 ...
- 数据结构——图:极大小连通子图、图的存储结构、图的遍历
图的基本概念: 极大连通子图就是连通分量. 极大连通子图与连通分量在无向图(undirected graph)这个前提下是等同的概念. 极小连通子图: 减去任何一条边就不再连通. 不管树还是二叉树:n ...
- 数据结构之图的存储结构一及其实现
图的存储结构 由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序映像的存储结构,但可以借助数组的数据类型表示元素之间的关系. ...
- 数据结构——图(存储结构)
数据结构--图 图的定义和基本术语 图的类型定义 图的存储结构 数组(邻接矩阵表示法) 网(即有权图)的邻接矩阵表示法 邻接表 邻接表表示法(链式) 图的邻接表存储表示 采用邻接表表示法创建无向网 邻 ...
- 【数据结构——图和图的存储结构】
目录 一.图的定义和基本术语(Graph) (一)图的定义 (二)图的基本术语 一.图的存储结构 (一)邻接矩阵(Adjacency Matrix) 1.无向图的邻接矩阵 2.有向图的邻接矩阵 3.网 ...
- 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法
大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...
最新文章
- MongoDB 索引
- TensorFlow入门(二)简单前馈网络实现 mnist 分类
- Firefox 突然拉黑中国用户
- 使用CoordinatorLayout打造一个炫酷的详情页
- SSM整合activiti框架
- 同时阅读多个pdf文档怎么办?
- 【译】Immutable.js : 操作 Set -8
- dts数据库迁移工具_干货分享丨DM8 DTS工具使用小技巧
- Android中如何提取和生成mp4文件
- EasyUI的combobox
- php连接postgresql数据库
- 主编编辑器操作流程指南
- 图论算法真的那么难吗?知识点都在这了……
- sop4封装尺寸图_扇出型面板级封装技术的演进
- 超实用的容器镜像漏洞检测工具 Trivy 入门指南
- java调起本地摄像头,利用openCV进行人脸识别(一)
- 一个简单的俄罗斯方块实现
- 新款H3C服务器图形化界面配置raid
- 监控数据库的作用是什么呢?
- Base128编码规范
热门文章
- 免费影像数据下载网站汇总——2010年7月28[转自ESRI中国]
- oracle rollback作用,Oracle ROLLBACK语句(回滚事务)
- Dual-View Distilled BERT for Sentence Embedding
- 计算机应用基础教研设想,《计算机应用基础》集体备课方案.doc
- 库克是出色的苹果CEO 这六点可以证明
- 通过 WSL在Windows下愉快的玩耍Linux
- 利用Windows 自带的任务计划功能设置闹钟
- SIGIR22:User-controllable Recommendation Against Filter Bubbles
- jpg、png、svg、gif等图片格式的区别
- 怎么计算子网能容纳的IP数量,如何看网络标识?