hdu4324 dfs
scanf("%1d")这种好像很慢。
#include<stdio.h> #include<string.h> #define maxn 2010 struct node { int to; int next; }a[maxn*maxn]; int n,pre[maxn],index; char map[maxn][maxn]; bool vis[maxn]; void add(int x,int y) { a[index].to=y; a[index].next=pre[x]; pre[x]=index++; } bool dfs(int u,int c) { int i,j,v; vis[u]=true; for(i=pre[u];i!=-1;i=a[i].next) { v=a[i].to; if(!vis[v]) { if(c!=-1&&map[v-1][c-1]=='1') { return true; } if(dfs(v,u)) return true; } } return false; } int main() { int i,j,t,ff=0; scanf("%d",&t); while(t--) { scanf("%d",&n); index=1; memset(pre,-1,sizeof(pre)); for(i=0;i<n;i++) { scanf("%s",map[i]); for(j=0;j<n;j++) { if(map[i][j]=='1') add(i+1,j+1); } } bool flag=false; memset(vis,false,sizeof(vis)); for(i=1;i<=n;i++) { if(!vis[i]&&dfs(i,-1)) { flag=true; break; } } printf("Case #%d: ",++ff); if(flag) { printf("Yes\n"); } else printf("No\n"); } }