hdu 1272 小希的迷宫 (深搜)
2013-06-12 08:23
351 查看
#include<stdio.h> #include<string.h> int a[100000][2],vis[100000],i,count; int f(int p,int k) { int j,t; for(j=k+1;j-k<=i;j++) { if(j>i) t=j-i-1; else t=j; if(p==a[t][0] && !vis[a[t][1]]) { vis[a[t][1]]=1;count++; if(f(a[t][1],t)==0) return 0; } else if(p==a[t][1] && !vis[a[t][0]]) { vis[a[t][0]]=1;count++; if(f(a[t][0],t)==0) return 0; } else if((p==a[t][0] && vis[a[t][1]]) || (p==a[t][1] && vis[a[t][0]])) return 0; } return 1; } int main() { int k,z; while(scanf("%d%d",&a[0][0],&a[0][1])==2 && (a[0][0]!=-1 || a[0][1]!=-1)) { if(a[0][0]==0 && a[0][1]==0) { printf("Yes\n");continue; } z=0; if(a[0][0]==a[0][1]) z=1; for(i=1;;i++) { scanf("%d%d",&a[i][0],&a[i][1]); if(a[i][0]==0 && a[i][1]==0) break; if(a[i][0]==a[i][1]) z=1; } if(z) { printf("No\n");continue; } i--; if(i>=99999) { printf("No\n");continue; } memset(vis,0,sizeof(vis)); vis[a[0][0]]=1;vis[a[0][1]]=1; k=0;count=0; if(f(a[0][0],k) && f(a[0][1],k) && count==i) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- HDU 1272 小希的迷宫 并查集 (判断任意2个点是否有且仅有一条路径可以相通)
- hdu 1272 小希的迷宫
- 小希的迷宫 hdu 1272(并查集)
- HDU - 1272 小希的迷宫(看似并查集的水题)
- HDU 1272 小希的迷宫(并查集)
- HDU 1272--小希的迷宫【并查集,有值得注意的地方】
- hdu——1272——小希的迷宫(数)
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫
- HDU 1272 小希的迷宫
- hdu1272_小希的迷宫
- HDU 1272 小希的迷宫
- hdu-1272 小希的迷宫
- HDU-1272 小希的迷宫(并查集)
- Hdu1272 小希的迷宫 【并查集】
- HDU1272小希的迷宫
- HDU - 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫 (并查集)
- hdu-1272小希的迷宫
- HDU ~ 1272 ~ 小希的迷宫 (并查集 + set)