邻接表来存储一个图
//用邻接表来存储一个图 int n, m, i; int u[6], v[6], w[6]; int first[5], next[5]; scanf("%d%d", &n, &m); //初始化first数组下标1~n的值为-1, 表示1~n顶点暂时都没有边 for(i = 1; i <= n; ++i) first[i] = -1; for(i = 1; i <= m; ++i) { scanf("%d %d %d", &u[i], &v[i], &w[i]); //读入每一条边 //下面两句是关键啦 next[i] = first[u[i]]; first[u[i]] = i; } //遍历每个顶点的边 for(i = 1; i <= n; ++i) { k = first[i]; while(k != -1) { printf("%d %d %d\n", u[k], v[k], w[k]); k = next[k]; } } /* first[i]:以i为起点的边的编号,没有的话设为-1 next[i]:编号为i的边的前一条边的编号,同样的,没有也设为-1 (前一条边:与当前边(也就是i)同一个起点的边,只不过是比i早搜到,早储存) first[i]再储存完之前一直存的是搜到的第一条以i为起点的边的编号, but,如果有另一条以i为起点的边, 则next[另一条以i为起点的边的编号]=第一条以i为起点的边的编号,记录了两次, ∴若以i为起点的边>=3(反正就是比较多,不一定>=3), 则它可以存最后搜到的以i为起点的边的编号 遍历边的时候,其实是取的边的编号 总之,first和next都是记录的边的编号 */