BZOJ1054 [HAOI2008]移动玩具
2014-10-30 15:35
253 查看
有时候题解要写的简略一点...于是:
裸的bfs妥妥的。。。
注意hash函数的选取及判断重复即可
结果memcpy函数写错了,调了好长好长时间、、、哭T T...
(据说不判重也可以过。。。汗!)
View Code
裸的bfs妥妥的。。。
注意hash函数的选取及判断重复即可
结果memcpy函数写错了,调了好长好长时间、、、哭T T...
(据说不判重也可以过。。。汗!)
/************************************************************** Problem: 1054 User: rausen Language: C++ Result: Accepted Time:28 ms Memory:3060 kb ****************************************************************/ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int dx[4] = {0, 0, 1, -1}; const int dy[4] = {1, -1, 0, 0}; bool Ans[5][5], vis[70000]; struct data{ bool a[5][5]; int step; }q[70000]; int begin, end, H; int l, r; int hash(bool a[5][5]){ int k = 1, res = 0, i, j; for (i = 1; i <= 4; ++i) for (j = 1; j <= 4; ++j) res += k * a[i][j], k <<= 1; return res; } int main(){ char ch[5]; int i, j, k, X, Y; for (i = 1; i <= 4; ++i) for (j = 1, scanf("%s", ch); j <= 4; ++j) q[0].a[i][j] = ch[j - 1] - '0'; for (i = 1; i <= 4; ++i) for (j = 1, scanf("%s", ch); j <= 4; ++j) Ans[i][j] = ch[j - 1] - '0'; begin = hash(q[0].a); end = hash(Ans); if (begin == end){ printf("0\n"); return 0; } vis[begin] = 1; for (l = r = 0; l <= r; ++l) for (i = 1; i <= 4; ++i) for (j = 1; j <= 4; ++j) if (q[l].a[i][j]) for (k = 0; k < 4; ++k){ X = i + dx[k], Y = j + dy[k]; if (X < 1 || Y < 1 || X > 4 || Y > 4 || q[l].a[X][Y]) continue; swap(q[l].a[i][j], q[l].a[X][Y]); H = hash(q[l].a); if (!vis[H]){ if (H == end){ printf("%d\n", q[l].step + 1); return 0; } vis[H] = 1; q[++r].step = q[l].step + 1; memcpy(q[r].a, q[l].a, sizeof(q[r].a)); } swap(q[l].a[i][j], q[l].a[X][Y]); } return 0; }
View Code
相关文章推荐
- bzoj 1054: [HAOI2008]移动玩具
- bzoj1054: [HAOI2008]移动玩具
- bzoj 1054: [HAOI2008]移动玩具 bfs
- 【BFS】bzoj1054 [HAOI2008]移动玩具
- [BZOJ1054][HAOI2008]移动玩具(bfs+Hash)
- BZOJ1054 [HAOI2008]移动玩具
- [BZOJ1054][HAOI2008]移动玩具(bfs+hash)
- 【BZOJ1054】[HAOI2008]移动玩具【BFS】【Hash】
- 【bzoj1054】[HAOI2008]移动玩具 Bfs
- BZOJ大视野 1054: [HAOI2008]移动玩具 解题报告
- [BZOJ1054][HAOI2008]移动玩具(bfs+hash)
- BZOJ 1054 [HAOI2008]移动玩具
- BZOJ1054: [HAOI2008]移动玩具
- 【BZOJ 1054】 [HAOI2008]移动玩具 bfs
- 【BZOJ1054】[HAOI2008]移动玩具 BFS
- BZOJ 1054: [HAOI2008]移动玩具 BFS, Hash
- bzoj 1054: [HAOI2008]移动玩具.cpp
- [BZOJ 1054][HAOI 2008]移动玩具(BFS+判重)
- 【BZOJ 1054】 [HAOI2008]移动玩具
- [BZOJ 1054][HAOI 2008]移动玩具 状态压缩