Kahn演算法
找出圖中任意入度為0的一個點,將它刪除並放入集合a(即讓他到達的點的入度減一),最後集合a的順序就是一個合法的拓撲序列。
點選檢視程式碼
int a[N],into[N],ma[N][N],n;//a為排序好的拓撲序列,into記錄入度,ma存圖
bool topsort(){
for(int i=1;i<=n;i++){
int j=1;
while((!into[j])&&j<=n) j++;//尋找入度為0的點
if(j>n) return false;//如果沒有入度為0的點,返回不成立
else{
a[i]=j;
into[j]=INF;//刪除該點
for(int k=1;k<=n;k++) if(ma[j][k]) ru[k]--;//將相連的點的入度全部減一
}
}
return true;
}