图的储存——链式前向星

链式前向星,简而言之便是一条边穿着另一条边,即让每一个节点记住自己相连接的边,这样便能够储存更多边的信息。模版如下:

int head[MAX];
struct Edge{
	int n,to,dis;
}edge[500005];
void addedge(int from,int to,int dis) 
{ 
	edge[++num].n=head[from]; 
	edge[num].to=to;
	edge[num].dis=dis;
	head[from]=num;
}

后面若要增加一条边调用方法即可

cin>>a>>b>>c;
addedge(a,b,c);

其原理是用结构体记录边的信息,并且在head数组中记录每一条边的起点在结构体集合(edge[5000005])中的下标位置,并在该结构体的n记录同一起点在head数组中的下标
因此,若要读取边的信息,只需要使用while循环直到结构体中的下一个点(edge.n)等于0时即可。
如果你要找起点为now的边时,代码如下

        //a为在head中记录最晚的edge下标
        int a = head[now];//now为起点
		while(1){
		    //edge[a].dis为now到edge[a].to的长度
		    cout<<edge[a].dis;
			a = edge[a].n;
			if(a==0)break;
		}

这边是这篇文章的所有内容,若有不对之处欢迎在评论区留言指教,谢谢

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值