http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1475
水水的拓扑的一部分
事先看别人的解题报告再做的,注意测试数据里有 a b,
#include<iostream>
#include<cstring>
using namespace std;
int n,m,f,tar,ans,ok;
int g[105][105],vis[105];
void topo(int x)
{
if(!ok)return;
vis[x]=1;
for(int i=1;i<=n;i++)
{
if(g[x][i])
{
if(vis[i]){ok=0;return;}
else {vis[i]=1;topo(i);vis[i]=0;}
}
}
return;
}
int main()
{
while(cin>>n&&n!=-1)
{
int a,b;
ok=1;
memset(vis,0,sizeof(vis));
memset(g,0,sizeof(g));
for(int i=0;i<n;i++)
{
cin>>a>>b;
if(a!=b)g[a][b]=1;
}
cin>>tar;topo(tar);
if(ok)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
}
可能a==b,可以忽略。