//链式前向星(存图)
#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做为终止条件。