//***********************储存*********************** struct node { int nxt; // 相连的点。 int val; int lst; // 上一条同一起点的边的编号 node () {} node (int next, int value) : nxt(next), val(value) {} }; node edge[maxn]; int last[maxn]; // last[i]表示以i为起点的最后一条边的编号。通常初始化为-1 int a, b, c; for (i=1; i<=q; ++i) { sf("%d%d%d", &a, &b, &c); edge[i].nxt = b; edge[i].val = c; edge[i].lst = last[a]; last[a] = i; } //********************遍历************************** for (int i=1; i<=n; ++i) { for (int u = last[now.i]; u!=-1; u=edge[u].lst) { // u为以i为起点的一条边的编号。 } } //邻接表用Vector则是很方便的 edge[a].push_back(node(b, c));