图的储存方式

图的储存方式 :1.邻接矩阵 2.邻接链表

邻接矩阵

(1)无向图:

第i行第j列表示节点i与节点j之间的联系

规定:

0:没有边  1:有边

自己指自己无意义设为0

我们可以发现这样接收关系后得到的矩阵为对称矩阵,矩阵[i,j]与矩阵[j,i]是一样的。这样其实就已经是浪费了一半的储存空间了。

对于无向图我们可以通过一维数组来储存【i,j】的关系

 默认是取下三角的,我们可以从上到小,从左到右,对元素排序。而【i,j】表示的i与j之间的连通关系对应的下标是i(i+1)/2+j

需要注意的是第i行第j列,j<i,若j>i则换成第j行第i列

(2)有向图

【i,j】表示从i向j的有向联系是否存在

规定:0:没有边  1:有边

自己指自己无意义设为0

注意:1).对与邻接矩阵的储存方式而言,我们希望边的关系尽可能的多(稠密),这样才不会浪费开创的空间

2).若为加权图则是将1改为权值

(3)求度的问题:

无向图:第i行中1值的个数

有向图:度分为入度,出度

入度:第i列所有1的个数

出度:第i行所有1的个数

2.邻接链表

创建一个链表数组arr,arr【i】表示与i有联系的点组成的链表

typedef struct node *list;
struct node
{
   int weight;//权值
   list next;//连接的下一个节点
}

list graph[n];

 链表表示图,对于无向与有向,只是自己编码逻辑的确定

对于【i,j】

无向则是在第i,j行的链表中连接对应的i节点或j节点

有向则是仅在第i行的链表中连接对应的j节点

注意:对于链表表示的图,我们希望边的关系尽可能的少。

(1)度的问题

无向图:i节点对应的链表中的相连节点的个数

有向图:

出度:i节点对应的链表中的相连节点个数

出度:创建逆链表图,通过i节点的逆链表中的相连节点的个数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值