HDU - 5012 Dice BFS
来源:互联网 发布:智慧城市数据库 编辑:程序博客网 时间:2024/06/04 17:47
题目大意:给出两个色子,只能进行四种操作,左转,右转,上转,下转,问能否经过旋转使两个色子的各面都相同
解题思路:直接暴力,用vis数组表示是否搜索过,这种解法接近1S,有点悬
#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define maxn 700000using namespace std;const int Z[4][6] = {{2,3,1,0,4,5},{3,2,0,1,4,5},{5,4,2,3,0,1},{4,5,2,3,1,0}};struct Dice{int statu[6], time;}D;int A[6], B[6], vis[maxn], End, ans;bool solve() {queue<Dice> q;for(int i = 0; i < 6; i++)D.statu[i] = B[i];D.time = 0;q.push(D);while(!q.empty()) {Dice tmp = q.front();q.pop();int num = 0;for(int i = 0; i < 6; i++)num = num * 10 + tmp.statu[i];if(num == End) {ans = tmp.time;return true;}for(int i = 0; i < 4; i++) {int t = 0;Dice temp;for(int j = 0; j < 6; j++) {t = t * 10 + tmp.statu[Z[i][j]];temp.statu[j] = tmp.statu[Z[i][j]];}if(!vis[t]) {temp.time = tmp.time + 1;q.push(temp);vis[t] = 1;}}}return false;}int main() {while(scanf("%d", &A[0]) == 1) {End = A[0];for(int i = 1; i < 6; i++) {scanf("%d", &A[i]);End = End * 10 + A[i];}for(int i = 0; i < 6; i++)scanf("%d", &B[i]);memset(vis,0,sizeof(vis));if(solve()) printf("%d\n",ans);elseprintf("-1\n");}return 0;}另一种解法是推出最多旋转几次可以得到所需的情况,可以推出最多旋转5次
#include<cstdio>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int Z[4][6] = {{2,3,1,0,4,5},{3,2,0,1,4,5},{5,4,2,3,0,1},{4,5,2,3,1,0}};struct Dice{int statu[6], time;}D;int A[6], B[6],End, ans;bool solve() {queue<Dice> q;for(int i = 0; i < 6; i++)D.statu[i] = B[i];D.time = 0;q.push(D);while(!q.empty()) {Dice tmp = q.front();q.pop();int num = 0;for(int i = 0; i < 6; i++)num = num * 10 + tmp.statu[i];if(num == End) {ans = tmp.time;return true;}for(int i = 0; i < 4; i++) {int t = 0;Dice temp;for(int j = 0; j < 6; j++) {t = t * 10 + tmp.statu[Z[i][j]];temp.statu[j] = tmp.statu[Z[i][j]];}temp.time = tmp.time + 1;if(temp.time >= 6)return false;q.push(temp);}}return false;}int main() {while(scanf("%d", &A[0]) == 1) {End = A[0];for(int i = 1; i < 6; i++) {scanf("%d", &A[i]);End = End * 10 + A[i];}for(int i = 0; i < 6; i++)scanf("%d", &B[i]);if(solve()) printf("%d\n",ans);elseprintf("-1\n");}return 0;}
0 0
- HDU 5012-Dice(BFS)
- HDU 5012 Dice bfs
- HDU - 5012 Dice BFS
- bfs-HDU 5012Dice
- HDU 5012 Dice (bfs)
- HDU - 5012 Dice(BFS)
- HDU-#5012 Dice(BFS)
- hdu 5012 Dice(bfs)
- HDU 5012 Dice (BFS)
- HDU 5012 Dice 普通bfs
- HDU 5012 Dice (bfs + 记忆化搜索)
- BFS + 剪枝 之 hdu 5012 Dice
- HDU - 5012 Dice(bfs+hash)
- hdu HDU5012-Dice(BFS)
- hdu 5012 Dice(西安网络赛F题,BFS)
- hdu 5012 Dice
- HDU 5012 Dice
- hdu 5012 dice
- .net微信公众号开发——消息与事件
- iOSRGB常用的色值
- HDU4081Qin Shi Huang's National Road System(最小生成树+DFS)
- 基础练习 FJ的字符串
- hdu 5167-Fibonacci
- HDU - 5012 Dice BFS
- 如何执行一个mysql的sql脚本文件
- hdu5012(BFS)
- 字符串:翻转句子中单词的顺序
- Android蓝牙开发浅谈
- 欢迎使用CSDN-markdown编辑器
- 单例模式 和 静态成员 孰优孰劣?
- 数据库常用命令
- zoj 3785 What day is that day?