链式前向星

//链式前向星(存图)

#include
#include
#include
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做为终止条件。
 

你可能感兴趣的:(算法分类,学习笔记,算法,图论,c++)