
J - 数据结构实验之图论十:判断给定图是否存在合法拓扑序列(模板题:拓扑排序)
发布日期:2021-05-04 14:45:23
浏览次数:20
分类:技术文章
本文共 2671 字,大约阅读时间需要 8 分钟。
Description
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
Input
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
Output
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。Sample
Input
1 02 21 22 1
Output
YESNO
答案:
#include#include #define ll long longconst int N = 5e4 + 10;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 a,b; cin>>a>>b; mp[a][b]=1; //a->b 单向联通 mp[a][b]=mp[b][a]=1; //a<->b双向联通 in[b]++; //b对应入度+1 } int i; for(i=1; i<=n; i++) //找到入度为零的点 { if(!in[i]) { q[tail++]=i; //入度为零的点入队 } } int cnt=0; //计数 while(head
vector实现:
#include#include #define ll long long#define inf 0x3f3f3f3fconst int N = 11;using namespace std;vector mp[N];int in[N];void Toposort(int n){ vector zero; //入度为0的点 vector ans; //排序结果 int i; for(i=1;i<=n;i++) //找到入度为零的点 { if(!in[i]) //入度为零的点入队 zero.push_back(i); } while(!zero.empty()) //队列不为空 { int pos=zero.back(); zero.pop_back(); ans.push_back(pos); int len=mp[pos].size(); for(i=0;i >n>>m) { memset(mp,0,sizeof(mp)); memset(in,0,sizeof(in)); while(m--) { int a,b; cin>>a>>b; mp[a].push_back(b); in[b]++; } Toposort(n); } return 0;}
stl队列
#include#include #define ll long long#define inf 0x3f3f3f3fconst int N = 11;using namespace std;int mp[N][N];int in[N];void Toposort(int n){ queue q; int i; for(i=1; i<=n; i++) { if(!in[i]) q.push(i); } int cnt=0; while(!q.empty()) { int top=q.front(); q.pop(); cnt++; in[top]--; for(i=1; i<=n; i++) { if(mp[top][i]) { in[i]--; if(!in[i]) { q.push(i); } } } } if(cnt==n) cout<<"YES"< >n>>m) { memset(mp,0,sizeof(mp)); memset(in,0,sizeof(in)); while(m--) { int a,b; cin>>a>>b; mp[a][b]=1; in[b]++; } Toposort(n); } return 0;}
拓扑排序讲解:[传送门](https://docs.qq.com/doc/DTmRnbHFYR3RGVkRx)
发表评论
最新留言
不错!
[***.144.177.141]2025年03月28日 12时56分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
jQuery练习t81
2019-03-03
jQuery中使用animate方法替代其他动画方法
2019-03-03
jQuery练习t85
2019-03-03
jQuery练习t86
2019-03-03
jQuery练习t88
2019-03-03
jQuery练习t90
2019-03-03
jQuery练习t110
2019-03-03
jQuery练习t112
2019-03-03
jQuery练习t115
2019-03-03
jQuery练习t123
2019-03-03
jQuery练习t127,从0到1
2019-03-03
jQuery练习t128,从0到1
2019-03-03
jQuery练习t130,从0到1
2019-03-03
jQuery练习t167,从0到1
2019-03-03
jQuery练习t203,从0到1
2019-03-03
jQuery练习t248,从0到1
2019-03-03
jQuery练习t249,从0到1
2019-03-03
jQuery练习t250,从0到1
2019-03-03