2021級ACM班&2022年寒假集訓《資料結構》專題12--拓撲排序和關鍵路徑
阿新 • • 發佈:2022-05-11
A - 資料結構實驗之圖論十:判斷給定圖是否存在合法拓撲序列
題目連結 https://acm.sdut.edu.cn/onlinejudge3/contests/3990/problems/A
判定拓撲序列模板題
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,flag; 4 int mapp[1010][1010]; 5 int vis[1010]; 6 int in[1010]; 7 8 void topsort() 9 { 10 flag=n; 11 for(int i=1; i<=n; i++)12 { 13 for(int j=1; j<=n; j++) 14 { 15 if(in[j]==0 && vis[j]==0) 16 {//找入度為0且沒有被訪問過的點 17 flag--; 18 vis[j]=1; 19 for(int k=1; k<=n; k++)//遍歷尋找與被刪除點有關的結點,使其入度-1 20 if(mapp[j][k]) 21 in[k]--; 22 break;//每次只找一個度為0的點 23 } 24 } 25 } 26 if(flag) cout<<"NO"<<endl; 27 else cout<<"YES"<<endl; 28 } 29 30 int main() 31 { 32 while(cin>>n>>m) 33 { 34 memset(mapp,0,sizeof(mapp)); 35 memset(vis,0,sizeof(vis)); 36 memset(in,0,sizeof(in)); 37 while(m--) 38 { 39 int a,b; 40 cin>>a>>b; 41 mapp[a][b]=1; 42 in[b]++; 43 } 44 topsort(); 45 } 46 return 0; 47 }