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

来源:互联网 发布:公司数据库搭建 编辑:程序博客网 时间:2024/05/01 20:35
Problem Description

 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。

Input

 输入包含多组,每组格式如下。

第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)

后面m行每行两个整数a b,表示从a到b有一条有向边。

 

Output

 若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。

 

Example Input

1 02 21 22 1

Example Output

YES

存在合法的拓扑序列说明图一定是一个有向无环图(DAG),通过每个节点的入度来判断是否为DAG

#include <iostream>#include <cstring>using namespace std;int map[11][11];int deg[11];bool vis[11];int main(int argc, char const *argv[]){int n,m,flag;while(cin>>n>>m){memset(map,0,sizeof(map));memset(deg,0,sizeof(deg));memset(vis,false,sizeof(vis));if(m == 0){cout<<"YES"<<endl;continue;}for (int i = 0; i < m; ++i){int a,b;cin>>a>>b;map[a][b] = 1;deg[b]++;}for (int i = 1; i <= n; ++i){flag = 0;for(int j = 1; j <= n; ++j){if(!vis[j] && deg[j] == 0){vis[j] = true;for(int k = 1; k <= n; ++k){if(map[j][k]){deg[k]--;}}flag = 1;                    break;}}}if(flag == 0)cout<<"NO"<<endl;elsecout<<"YES"<<endl;}return 0;}



阅读全文
0 0
原创粉丝点击