#include <iostream>
using namespace std;
int map[104][104];
int n;
bool flag[104];
void update(int x)
{
for(int i=0;i<n;i++)
map[x][i]=0;
}
bool Tsort()
{
for(int i=0;i<n;i++)
{
bool ff=false;//判断改图是否为连通图
for(int j=0;j<n;j++)
{
if(flag[j])
continue;
int sign=1;
for(int k=0;k<n;k++)
if(map[k][j])
{
sign=0;
break;
}
if(sign)
{
flag[j]=true;
update(j);
ff=true;
break;
}
}
if(!ff)
return false;
}
for(int i=0;i<n;i++)//判断该是否存在回路(这个判断如果去掉也正确)
{
if(!flag[i])
return false;
}
return true;
}
int main()
{
int m,x,y;
while(scanf("%d%d",&n,&m)&&n!=0)
{
memset(map,0,sizeof(map));
memset(flag,false,sizeof(flag));
for(int i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
map[x][y]=1;
}
if(Tsort())
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
拓扑排序代码
最新推荐文章于 2023-12-14 22:02:15 发布