拓撲排序

BSS梅者如西發表於2024-10-10

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;
}

相關文章