HDU 5012 Dice 隐式图的搜索
来源:互联网 发布:田仲宥久子 知乎 编辑:程序博客网 时间:2024/06/05 10:46
题意:给出两个筛子的上下左右前后面,问能不能从一个筛子经过选择得打另外一个筛子,如果有方法,找到最小的步数。
思路:和八数码问题一样,这个题是隐式图的搜索。我们以筛子的上下前后左右为一个状态,直接BFS找到最小的步数,如果找不到,那就不存在方法。
注意:需要注意的地方就是在旋转的时候,各个面转移的情况。
代码如下:
#include <cstdio>#include <algorithm>#include <cstring>#include <utility>using namespace std;typedef pair<int,int> pii;const int MAX = 1000000;bool vis[MAX];int a;int num[10];pii que[MAX];int front,tail;void frac(int n){ for(int i = 5; i >=0; --i){ num[i] = n % 10; n /= 10; }}int get(){ int ans = 0; for(int i = 0; i < 6; ++i) ans = ans * 10 + num[i]; return ans;}int tofront(int n){ frac(n); int tmp = num[4]; num[4] = num[0]; num[0] = num[5]; num[5] = num[1]; num[1] = tmp; return get();}int toback(int n){ frac(n); int tmp = num[4]; num[4] = num[1]; num[1] = num[5]; num[5] = num[0]; num[0] = tmp; return get();}int toleft(int n){ frac(n); int tmp = num[0]; num[0] = num[3]; num[3] = num[1]; num[1] = num[2]; num[2] = tmp; return get();}int toright(int n){ frac(n); int tmp = num[0]; num[0] = num[2]; num[2] = num[1]; num[1] = num[3]; num[3] = tmp; return get();}int bfs(int s, int t){ memset(vis,0,sizeof(vis)); front = tail = 0; que[tail++] = pii(s,0); vis[s] = true; while(front < tail){ pii info = que[front++]; int n = info.first, d = info.second; if(n == t) return d; int tmp = toleft(n); if(!vis[tmp]){ vis[tmp] = true; que[tail++] = pii(tmp,d+1); } tmp = toright(n); if(!vis[tmp]){ vis[tmp] = true; que[tail++] = pii(tmp,d+1); } tmp = tofront(n); if(!vis[tmp]){ vis[tmp] = true; que[tail++] = pii(tmp,d+1); } tmp = toback(n); if(!vis[tmp]){ vis[tmp] = true; que[tail++] = pii(tmp,d+1); } } return -1;}int main(void){ //freopen("input.txt","r",stdin); while(scanf("%d",&a) != EOF){ int start = a; for(int i = 1; i < 6; ++i){ scanf("%d",&a); start = 10 * start + a; } int end = 0; for(int i = 0; i < 6; ++i){ scanf("%d",&a); end = end * 10 + a; } printf("%d\n",bfs(start,end)); } return 0;}
0 0
- HDU 5012 Dice 隐式图的搜索
- hdu 5012 Dice(隐式图搜索)
- 【搜索】 HDU 5012 Dice
- Dice - HDU 5012 搜索
- hud 5012 Dice(隐式图的搜索 )
- HDU 5012 Dice (bfs + 记忆化搜索)
- hdu 5012 Dice 记忆化搜索
- 【搜索】 HDOJ 5012 Dice
- hdu 5012 Dice
- HDU 5012 Dice
- hdu 5012 dice
- HDU 5012 Dice
- hdu 5012 Dice
- HDU 5012-Dice(BFS)
- HDU 5012 Dice bfs
- hdu 5012 Dice
- HDU - 5012 Dice BFS
- HDU - 5012 Dice
- Android滑动返回 SwipeBack
- QUML建模第一层:角色-业务图实现愿景(1)
- list的使用
- php服务器的选择
- DateTable,DateSet 转Json
- HDU 5012 Dice 隐式图的搜索
- 17_C# 实现VMS客户端——控件_TableLayoutPanel
- 对web.config的ConnectionString加密
- java学习笔记(七) -- 初涉对象
- Android集成支付宝(无线快捷支付)
- ORA-600 [kole_t2u], [34]
- PHP小记
- Servlet.service() for servlet jsp threw exception
- 黑马程序员————Java之初识