SDUT OJ 2140 图结构练习――判断给定图是否存在合法拓扑序列

2015-01-24 05:39:31 · 作者: · 浏览: 4
\
#include
  
   
#include
   
     using namespace std; int tp[11][11],visit[11]; int main() { int n,m,i,j,k,s,o,c; int flag,count,a,b; while(cin>>n>>m) { s=1; o=0; count=0; memset(tp,0,sizeof(tp)); memset(visit,0,sizeof(visit)); for(i=1;i<=m;i++) { cin>>a>>b; tp[a][b]=1; } /* for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(j==n) cout<
    
     n) s=0; else s=1; } /* for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(j==n) cout<
     
#include using namespace std; int tp[11][11],visit[11]; int n,m,u,v; int dfs(int u) { visit[u]=-1; for(v=1;v<=n;v++) { if(tp[u][v]==1) { if(visit[v]<0) return 0; else if(!visit[v] && !dfs(v)) return 0; } } visit[u]=1; return 1; } int topu() { for(u=1;u<=n;u++) { if(!visit[u]) { if(!dfs(u)) return 0; } } return 1; } int main() { int i; while(cin>>n>>m) { memset(tp,0,sizeof(tp)); memset(visit,0,sizeof(visit)); for(i=0;i >u>>v; tp[u][v]=1; } int k=topu(); if(k==0) cout<<"NO"<