裸的拓扑排序 图用邻接表表示 方法是dfs #include<stdio.h> #include<string.h> const int MAXN = 1000; struct edge{ int u, v, next; }e[MAXN]; int n; int first[MAXN], cnt; bool visit[MAXN], f; int sort[MAXN], top; void dfs(int s){ if(visit[s]) return; visit[s] = true; for(int x = first[s]; x != -1; x = e[x].next){ if(!visit[e[x].v]) dfs(e[x].v); } sort[++top] = s; } void toposort(){ memset(visit, false, sizeof(visit)); top = -1; for(int i = 1; i <= n; ++i){ if(!visit[i]) dfs(i); } } int main(){ scanf("%d",&n); memset(first, -1, sizeof(first)); for(int i = 1, cnt = 0; i <= n; ++i){ int a; while(true){ scanf("%d",&a); if(!a) break; e[cnt].u = i; e[cnt].v = a; e[cnt].next = first[i]; first[i] = cnt; cnt++; } } toposort(); bool f = true; while(top != -1){ if(f) f = false; else printf(" "); printf("%d",sort[top--]); } printf("/n"); return 0; }