日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构实验之图论十:判断给定图是否存在合法拓扑序列

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构实验之图论十:判断给定图是否存在合法拓扑序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description
給定一個有向圖,判斷該有向圖是否存在一個合法的拓撲序列。
Input
輸入包含多組,每組格式如下。
第一行包含兩個整數n,m,分別代表該有向圖的頂點數和邊數。(n<=10)
后面m行每行兩個整數a b,表示從a到b有一條有向邊。

Output
若給定有向圖存在合法拓撲序列,則輸出YES;否則輸出NO。
Sample
Input
1 0
2 2
1 2
2 1
Output
YES
NO

Tip:
AOV網與AOE網
分開說:
拓撲排序
AOE網關鍵路徑

//one #include<bits/stdc++.h>using namespace std;int mp[25][25];//建立圖 int in[25];//記錄入度 int q[111];//用數組模擬隊列來做的int main() {int n, m;while(cin >> n >> m){memset(mp, 0, sizeof(mp));//清空圖memset(in, 0, sizeof(in));//清空入度int head = 0, tail = 0;//清空隊列while(m--)//建圖{int u, v;cin >> u >> v;mp[u][v] = 1;in[v]++;//b對應的入度+1}for(int i = 1; i <= n; i++)//找到入度等于0的點{if(!in[i])q[tail++] = i;//入度為0的點入隊}int cnt = 0;//計數while(head < tail)//隊列不為空{int top = q[head++];//cnt++;in[top]--;//輸出點的入度由0變為-1for(int i = 1; i <= n; i++)//刪除top的后繼{if(mp[top][i]){in[i]--;if(!in[i])//判斷入地是否為零q[tail++] = i;//入度為零的入隊列}}}if(cnt == n)cout << "YES" << endl;elsecout << "NO" << endl;}return 0; } //two STL隊列 #include<bits/stdc++.h>using namespace std;int mp[11][11]; int in[11];void ToList(int n) {queue<int>q;for(int i = 1; i <= n; i++){if(!in[i])q.push(i);}int cnt = 0;while(!q.empty()){int top = q.front();q.pop();cnt++;for(int i = 1; i <= n; i++){if(mp[top][i]){in[i]--;if(!in[i])q.push(i);}}}if(cnt == n)cout << "YES" << endl;elsecout << "NO" << endl; }int main() {int n, m;while(cin >> n >> m){memset(mp, 0, sizeof(mp));memset(in, 0, sizeof(in));while(m--){int u, v;cin >> u >> v;mp[u][v] = 1;in[v]++;}ToList(n);}return 0; }

總結

以上是生活随笔為你收集整理的数据结构实验之图论十:判断给定图是否存在合法拓扑序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。