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,可以忽略。