HDU 2514 Another Eight Puzzle
2012-01-13 21:40
344 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2514
DFS
我的代码
DFS
我的代码
#include <stdio.h> #include <string.h> #include <stdlib.h> int a[10],cnt,ans[10]; bool vis[10]; bool conect(int x,int y) { if (x>y) {int t=x; x=y; y=t;} switch (x) { case 1:return y==2 || y==3 || y==4; case 2:return y==3 || y==5 || y==6; case 3:return y==4 || y==5 || y==6 || y==7; case 4:return y==6 || y==7; case 5:return y==6 || y==8; case 6:return y==7 || y==8; case 7:return y==8; } } bool ok(int p) { int i; for (i=1;i<=8;i++) if ((conect(i,p) && abs(a[p]-a[i])==1) && a[i]!=0) return 0; return 1; } void dfs(int p) { if (cnt>1) return; while (p<=8 && a[p]) p++; if (p>8) { cnt++; memcpy(ans,a,sizeof(a)); return; } for (int i=1;i<=8;i++) if (!vis[i]) { vis[i]=1; a[p]=i; if (ok(p)) dfs(p+1); a[p]=0; vis[i]=0; } } int main() { int T,C=0; scanf("%d",&T); int i,flag; while (T--) { cnt=0; flag=1; memset(vis,0,sizeof(vis)); memset(a,0,sizeof(a)); for (i=1;i<=8;i++) { scanf("%d",&a[i]); vis[a[i]]=1; if (a[i] && !ok(i)) flag=0; } if (flag) dfs(1); printf("Case %d:",++C); if (cnt==1) for (i=1;i<=8;i++) printf(" %d",ans[i]); else if (cnt==0) printf(" No answer"); else printf(" Not unique"); printf("\n"); } }
相关文章推荐
- HDU 2514 Another Eight Puzzle(DFS)
- HDU 2514 Another Eight Puzzle
- hdu 2514 Another Eight Puzzle
- Problem V:Another Eight Puzzle(HDU 2514)
- hdu 2514—— Another Eight Puzzle
- hdu 2514 Another Eight Puzzle
- HDU 2514 Another Eight Puzzle
- HDU 2514 Another Eight Puzzle
- hdu 2514 Another Eight Puzzle(DFS+回溯)
- hdu 2514 Another Eight Puzzle 枚举
- hdu 2514 Another Eight Puzzle
- hdu 2514 Another Eight Puzzle 图填数字 next_permutation+暴力
- hdu 2514 Another Eight Puzzle(DFS暴搜)
- HDU 2514 Another Eight Puzzle
- HDU 2514--Another Eight Puzzle【DFS】
- HDU [ Another Eight Puzzle ]——dfs全排列变式
- hdu 2541 Another Eight Puzzle(dfs)
- hdoj 2514 Another Eight Puzzle(DFS)
- hdu 2518(dfs)Another Eight Puzzle
- Another Eight Puzzle