hdu2514 Another Eight Puzzle (全排列、暴力)
2013-07-19 08:44
246 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2514
n = 8, 我直接用了next_permutation 全排列 , 然后对每一个排列进行即可。
n = 8, 我直接用了next_permutation 全排列 , 然后对每一个排列进行即可。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int a[10]; int b[10]; int ans[10]; int pos[10]; bool used[10]; int n, flag; int map[8][8]= { {0,1,1,1,0,0,0,0}, {1,0,1,0,1,1,0,0}, {1,1,0,1,1,1,1,0}, {1,0,1,0,0,1,1,0}, {0,1,1,0,0,1,0,1}, {0,1,1,1,1,0,1,1}, {0,0,1,1,0,1,0,1}, {0,0,0,0,1,1,1,0}, }; bool judge() { int i, j; for(i=0; i<8; i++) for(j=0; j<8; j++) if(map[i][j]&&(a[i]-a[j]==1||a[j]-a[i]==1) ) return false; return true; } int main() { int T, i, flag,f, cnt = 0,n; scanf("%d",&T); while(T--) { printf("Case %d:",++cnt); n = 0; memset(used,0,sizeof(used)); for(i=0; i<8; i++) { scanf("%d",&a[i]); if(a[i]==0) pos[n++] = i; used[ a[i] ] = true; } n = 0; for(i=1; i<=8; i++) if(!used[i]) b[n++] = i; flag = 0; do { for(i=0; i<n; i++) a[ pos[i] ] = b[i]; if(judge()) { if(++flag>1) break; for(i=0; i<8; i++) ans[i] = a[i]; } } while(next_permutation(b,b+n)); if(flag==1) { for(i=0; i<8; i++) printf(" %d",ans[i]); } else if(flag==0) printf(" No answer"); else printf(" Not unique"); printf("\n"); } return 0; }
相关文章推荐
- HDU2514 Another Eight Puzzle
- HDU2514 Another Eight Puzzle
- hdu2514 Another Eight Puzzle 填数字 搜索水题
- hdu2514 Another Eight Puzzle
- hdu 2514 Another Eight Puzzle 图填数字 next_permutation+暴力
- (全排列)Another Eight Puzzle--HDOJ
- HDU 2514 Another Eight Puzzle
- hdu 2514 Another Eight Puzzle
- HDU 2514 Another Eight Puzzle
- hdu 2541 Another Eight Puzzle(dfs)
- hdu 2518(dfs)Another Eight Puzzle
- Another Eight Puzzle
- hdu 2514 Another Eight Puzzle(DFS+回溯)
- HDU 2514 Another Eight Puzzle
- Another Eight Puzzle (枚举深搜)
- hdu 2514 Another Eight Puzzle
- HDOJ Another Eight Puzzle
- HDU 2514 Another Eight Puzzle
- HDU1755 A Number Puzzle【全排列+暴力】
- ACM--steps--4.3.8--Another Eight Puzzle