//拓撲排序 class TopologicalSort{ int[][] graph; int[] list; void input(int[][] graph){ this.graph=graph; list=new int[graph.length]; calculate(); } void calculate(){ Stack stack=new Stack(); for(int i=0; i<graph.length; i++){ if(graph[i][0]==0){ stack.push(i); } } int i=0; while(stack.empty()!=true){ list[i]=(Integer)stack.pop(); for(int j=1; j<graph[list[i]].length; j++){ int k=graph[list[i]][j]; if((--graph[k][0])==0){ stack.push(k); } } i++; } if(i<graph.length){ System.out.println("存在環,不可排序!"); System.exit(0); } } int[] getList(){ return list; } } public static void main(String[] args){ int[][] graph={{0,1,2,3,},{2,},{1,1,4,},{2,4,},{3,},{0,3,4,},}; int[] list=new int[graph.length];; TopologicalSort topologicalSort=new TopologicalSort(); topologicalSort.input(graph); list=topologicalSort.getList(); for(int l : list){ System.out.print(l+" "); } }
拓撲排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.