链式前向星

本文介绍了一种链式前向星数据结构用于存储图,并展示了如何初始化、添加边以及遍历图的方法。代码中定义了结构体node表示边,用head数组记录每个节点的起始边索引,通过遍历找到每条边并打印其信息。程序读取图的节点数、边数及边的权重,构建无向图并输出所有边的详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//链式前向星(存图)

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 10010;
int n,m,x,y,w,cnt;
int head[N];
struct node
{
	int to,next,w;
}edge[N * N];

//edge[ ]边集
//head[i]表示以i 为起点第一条边的下标 
void init()
{
	memset(head,-1,sizeof(head));
	cnt = 0;
}

void add(int u,int v,int w)
{
	edge[cnt].to = v;
	edge[cnt].w = w;
	edge[cnt].next = head[u];
	head[u] = cnt++;
}
void print()
{
	for(int v = 1;v <= n;v++)
	{
		for(int i = head[v];i!=-1;i = edge[i].next)
		{
			int v1 = edge[i].to;
		    int w1 = edge[i].w;
		}
		
	}
}
int main()
{
	init();
	cin>>n>>m;
	for(int i = 1;i <= m;i++)
	{
		cin>>x>>y>>w;
		add(x,y,w);
		add(y,x,w);
	}
	print();
	
	return 0;
	
 } 
 

第一层for循环是找每一个点,依次遍历以[ 1,n ]为起点的边的集合。

第二层for循环是遍历以 i 为起点的所有边,k首先等于head[ i ],注意head[ i ]中存的是以 i 为起点的第一条边的编号。然后通过edge[ j ].next来找下一条边的编号。

我们初始化head为-1,所以找到你最后一个边(也就是以 i 为起点的第一条边)时,

你的edge[ i ].next为 -1做为终止条件。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值