import java.util.*; public class Tuopupaixu2 { public static void main(String args[]){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); List<Integer> graph[]=new ArrayList [n+1]; //使用List graph[]形式存储邻接表 for(int i=0;i<=n;i++) graph[i]=new ArrayList<Integer>(); int du[]=new int[n+1]; int m=in.nextInt(); int x,y; for(int i=0;i<m;i++){ x=in.nextInt(); y=in.nextInt(); int flag=1; for(int j=0;j<graph[x].size();j++){ if((int)graph[x].get(j)==y){ flag=0; break; } } if(flag==1){ du[y]++; graph[x].add(y); } } int cnt=0; Queue<Integer> queue=new LinkedList<Integer>(); //用于拓扑排序 Queue<Integer> ans=new LinkedList<Integer>();//记录结果 for(int i=1;i<=n;i++){ if(du[i]==0){ queue.offer(i); ans.add(i); du[i]=-1; cnt++; } } //挨个遍历 while(queue.size()>0){ int temp2=queue.poll(); for(int i=0;i<graph[temp2].size();i++){ int temp4=(int)graph[temp2].get(i); du[temp4]--; if(du[temp4]==0){ queue.offer(temp4); du[temp4]=-1; ans.add(temp4); cnt++; } } } //判断结果 if(cnt==n){ int flag1=1; while(ans.size()>0){ if(flag1==1){ System.out.print(ans.poll()); flag1=0; }else{ System.out.print(" "+ans.poll()); } } System.out.println(); }else{ System.out.println("无法排序"); } } } }
拓扑排序-List graph[]实现
最新推荐文章于 2022-09-09 17:20:12 发布
本文详细介绍了一种基于Java的拓扑排序算法实现方法,通过邻接表存储顶点之间的依赖关系,利用队列进行遍历,实现了对有向无环图的节点排序。文章深入解析了算法的流程,包括读取输入、构建图结构、初始化顶点入度、执行拓扑排序及输出结果等关键步骤。
摘要由CSDN通过智能技术生成