图结构练习——判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
输入
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
输出
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。
示例输入
1 0 2 2 1 2 2 1
示例输出
YES NO
///ACcode 合法的拓扑排序 其实就是 图没有环就可以了....
#include <bits/stdc++.h>
using namespace std;
bool Map[11][11];
void Find(int n)
{
int i,j;
for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++)
{
if (i!=j)
{
if (Map[i][j]&&Map[j][i]) /// 判断是否成环 注意 i==j情况
{
cout<<"NO"<<endl;
return ;
}
}
}
}
cout<<"YES"<<endl; /// 之前没找到环 则YES
return ;
}
int main()
{
int n,m;
int i;
int u,v;
while(cin>>n>>m)
{
memset(Map,0,sizeof(Map)); ///清零 双重for也可
for (i=1; i<=m; i++)
{
cin>>u>>v;
Map[u][v]=1;
}
Find(n);
}
return 0;
}
///拓扑排序传送门