(Java資料結構和演算法)拓撲排序
阿新 • • 發佈:2018-12-01
拓撲排序
public class Main {
public static void main(String[] args){
System.out.println("請輸入一個圖的鄰接矩陣(8X8):");
int[][] map = new int[8][8];
int[] inDegree = new int[8];
for(int i = 0; i < 8; i++){
inDegree[i] = 0;
}
java.util.Scanner scan = new java.util.Scanner(System. in);
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
map[i][j] = scan.nextInt();
if(map[i][j] == 1){
inDegree[j]++;
}
}
}
String str = "abcdefgh";//使得字母和對應的下標數字對應
//拓撲排序
//每次幹掉一個節點,最多幹8次,8次幹不完,說明有環
for(int i = 0; i < 8; i++){
//找一個入度是0的節點,幹掉
for(int j = 0; j < 8; j++){
if(inDegree[j] == 0){
inDegree[j]--;
System.out.print(str.charAt(j)+" ");
//並刪除以j為起點的邊
for(int k = 0; k < 8; k++){
if(map[j][k] == 1){
inDegree[k]--;
}
}
break;
}
}
}
System.out.println();
}
}