您当前的位置: 首页 >  矩阵
  • 1浏览

    0关注

    880博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【大话数据结构C语言】38 图的存储结构(邻接矩阵)

CodeAllen嵌入式编程 发布时间:2021-04-24 21:32:45 ,浏览量:1

我的首发平台是公众号【CodeAllen】,学习交流QQ群:736386324,转载请注明出处

因为图人任意两点之间都可能存在联系,所以无法用数据元素在内存中的物理位置表示元素之间的关系

因此将数组和链表的特性结合在一起才能更好的存放

 

比如下面四张图其实是一个图

临接矩阵(无向图)
考虑到图是由顶点和边或弧两部分组成,合在一起比较困难,那就很自然地考虑到分为两个结构来分别存储
顶点因为不区分大小、主次,所以用一个一维数组来存储是狠不错的选择
而边或弧由于是顶点与顶点之间的关系,一维数组肯定就搞不定了,那我们不妨考虑用一个二维数组来存储
 
图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

我们可以设置两个数组,顶点数组为vertex[4]={V0,V1,V2,V3},边数组arc[4][4]为对称矩阵(0表示不存在顶点间的边,1表示顶点间存在边)。

对称矩阵:所谓对称矩阵就是n阶矩阵的元满足a[i][j]=a[j][i](0numEdges); 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 int main() { int i; for(i=1;i

关注
打赏
1665938897
查看更多评论
立即登录/注册

微信扫码登录

0.0382s