题目:火星人的血缘关系,简单拓扑排序。很久没用邻接表了,这里复习一下。
import java.util.Scanner; class edge { int val; edge next; } public class Main { static int n; static int MAXV = 1001; static edge head[] = new edge[MAXV]; static int in[]; static boolean vis[]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ n = sc.nextInt(); for (int i = 0; i <= n; i++) { head[i] = new edge(); } in = new int[MAXV]; vis = new boolean[MAXV]; for (int i = 1; i <= n; i++) { int a; while ((a = sc.nextInt()) != 0) { edge t = new edge(); t.val = a; t.next = head[i].next; head[i].next = t; in[a]++; } } int[] ans=new int[n+1]; String s = ""; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (in[j] == 0 && !vis[j]) { vis[j] = true; s += j+" "; ans[i]=j; edge t = head[j].next; while (t != null) { in[t.val]--; t = t.next; } break; } } } for(int i=1;i<n;i++){ System.out.print(ans[i]+" "); } System.out.println(ans[n]); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。