/**
* 拓扑排序
* https://blog.csdn.net/a1439775520/article/details/96720172
* 减治法
* */
public class TopoSort {
public static void main(String[] args) {
//构造邻接矩阵
int[][] m= {
{0,0,1,0,0},
{0,0,1,0,0},
{0,0,0,1,1},
{0,0,0,0,1},
{0,0,0,0,0}
};
topoSort(m);
}
private static void topoSort(int[][] m){
int[] in =new int[m.length]; //记录每个索引入度
for(int i=0;i<m.length;i++){
int count=0;
for(int j=0;j<m.length;j++){
if(m[j][i] == 1){
count++;
}
}
in[i] = count;
}
boolean flag=true;
int len=0;
while(flag) {
for (int i = 0; i < m.length; i++) {
if (in[i] == 0) {
in[i] = -1;
len++;
System.out.println(i);
for (int j = 0; j < m.length; j++) {
if (m[i][j] == 1) {
in[j]--;
}
}
}
}
if(len==m.length){
flag=false;
}
}
}
}