【前向星】数据结构的实现
/* 前向星数据结构的实现 2014-4-1 21:36:48 */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> #define MAX 10000 using namespace std; int head[MAX]; //存储起点为Vi的第一条边的位置 struct NODE{ int from, to, w; //起点,终点,权值 }; NODE edge[MAX]; bool cmp(NODE a, NODE b){ if(a.from == b.from && a.to == b.to) return a.w < b.w; if(a.from == b.from) return a.to < b.to; return a.from < b.from; } int main(){ int n, m; //n个点,m个数据 scanf("%d%d", &n, &m); for(int i = 0; i < m; ++i) scanf("%d%d%d", &edge[i].from , &edge[i].to, &edge[i].w); sort(edge, edge + m, cmp); //排序 memset(head, -1, sizeof(head)); head[edge[0].from] = 0; for(int i = 1; i < m; ++i) if(edge[i].from != edge[i - 1].from) head[edge[i].from] = i; //遍历 for(int i = 1; i <= n; ++i){ for(int k = head[i]; edge[k].from == i && k < m; ++k) printf("%d %d %d\n", edge[k].from, edge[k].to, edge[k].w); } system("pause"); return 0; }