初学邻接表

据说邻接表在图论中用的比较多

//例如输入3  1 2 10;1 3 20;1 4 30; 会输出4 30;3 20;2 10;
//输入1 2 10时,edge[0].u=1,edge[0].v=2,edge[0].w=10,edge[0].next=-1;此时head[1]=0,cnt=1;
//就是这里,输入1 3 20时,egde[1].u=1,egde[1].v=3,edge[1].w=20,edge[1].next=0;此时head[1]=1,cnt=2;
//edge[].next指向的是前一个,相当于链表里的指针的作用 
#include<cstdio>
#include<cstring>
int head[1010];
int cnt;
struct node 
{
	int u,v,w,next;
}edge[1010];
void add(int u,int v,int w)//添加相连边,u为原始点,v为与u相连的点,w为权值 
{
	edge[cnt].u=u;
	edge[cnt].v=v;
	edge[cnt].w=w;
	edge[cnt].next=head[u];//这里指向上一个,查找的时候用到 
	head[u]=cnt;//上午大神的代码是head[u]=cnt++原来是先赋值再自增,我这渣渣。。。 
	cnt++;
}
int main()
{
	int n;
	while(scanf("%d",&n)&&n)
	{
		memset(head,-1,sizeof(head));//head数组初始化为-1
		cnt=0;//cnt初始化为0 从0开始放
		int u,v,w;
		while(n--)
		{
			scanf("%d%d%d",&u,&v,&w);
			add(u,v,w);
		}
		scanf("%d",&u);
		for(int i=head[u];i!=-1;i=edge[i].next)//查找所有与u相连的边 
		{//从后往前查找 
			int v=edge[i].v;
			int w=edge[i].w;
			printf("%d %d\n",v,w);
		}
	}
	return 0;
} 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值