假设现有 0,1,2,3 四个文件,0号文件依赖1号文件,1号文件依赖2号文件,3号文件依赖1号文件,则源文件的编译顺序为 2,1,0,3 或 2,1,3,0。现给出文件依赖关系,如 1,2,-1,1,表示0号文件依赖1号文件,1号文件依赖2号文件,2号文件没有依赖,3号文件依赖1号文件。请补充完整程序,返回正确的编译顺序。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
//建立入度表
int[] inDegree=new int[n+1];
PriorityQueue<Integer> queue=new PriorityQueue<>();
//建立邻接表
List<List<Integer>> list=new ArrayList<>();
for(int i=0;i<n+1;i++){
list.add(new ArrayList<>());
}
int a,b;
for(int i=0;i<m;i++){
//b依赖于a,a完成才能进行b
a=sc.nextInt();
b=sc.nextInt();
//分别往邻接表和入度表中填入数据
list.get(a).add(b);
inDegree[b]++;
}
for(int i=1;i<n+1;i++){
//如果入度为0,则可进入队列
if(inDegree[i]==0)
queue.offer(i);
}
StringBuilder sb=new StringBuilder();
int index=0;
while(!queue.isEmpty()){
int head=queue.poll();
index++;
sb.append(head+" ");
List<Integer> tmp=list.get(head);
for(Integer num: tmp){
inDegree[num]--;
if(inDegree[num]==0){
queue.offer(num);
}
}
}
if(index==n)
System.out.println(sb.toString());
else
System.out.println("-1");
}
}