zoj 2474Benny's Compiler

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

posted on 2011-04-10 23:07  4.5.6  阅读(267)  评论(0)    收藏  举报