C++中图的存储

本文介绍了C++中图的存储方式,包括无向图、有向图和带权图的概念。主要探讨了两种常见的存储结构——邻接矩阵和邻接表,详细解释了它们的工作原理,并通过一个4节点有向图的例子展示了邻接表(前向星和STL实现)的存储形式。邻接矩阵适用于边多的情况,而邻接表则适用于点多边少的场景。
摘要由CSDN通过智能技术生成

几个简单的概念

无向图,ab两个点之间有一条边,可以从a到b,也可以从b到a,就叫做无向。

有向图,ab两个点之间有一条边,仅允许从a到b或者从b到a,就叫做有向。

带权,从a到b需要付出c的代价。

 

图的存储方式比较常见的2类,邻接矩阵和邻接表

1、邻接矩阵,用一个数组来记录图的情况。

int mp[111][111];
mp[a][b]=1;          //有向无权 
mp[a][b]=mp[b][a]=1; //无向无权 
mp[a][b]=c;          //有向带权 
mp[a][b]=mp[b][a]=c; //无向带权 

for(int i=1;i<=n;i++){
    if(mp[a][i]){}   //遍历a节点的边
}

2、邻接表,可以细化为借助STL实现的邻接表和前向星,本质上没有区别,只是存储结构稍有不同

比如对于一个4个节点的有向图,其中有边1-2,1-3,1-4, 2-3,2-4,3-4

邻接表存的形式是 

1->2->3->4

2->3->4

3->4

前向星

1->4>3>2

2->4->3

3->4

 

STL邻接表

struct node{
	int to;    //终点 
	int v;     //权 
}rt;
vector<node>v[maxn];
void add(int a,int b,int c){  //从a
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值