Bzoj 1054 [HAOI2008]移动玩具
来源:互联网 发布:vb教程 编辑:程序博客网 时间:2024/04/27 23:20
Description
在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移动到某人心中的目标状态。
Input
前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。接着是一个空行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。
Output
一个整数,所需要的最少移动次数。
Sample Input
11110000111000101010010110100101
Sample Output
4
Key To Problem
hash+dfs
用二进制表示这个图,若某个位置有玩具,则这个位置的二进制表示的值是1,否则即为0。
例如:
1111000011100010
其所表示的值为:
之后的就是宽搜了,若某一位有玩具,则向它相邻且无玩具的位置移动,并将移动后的hash值加入队列,若搜到目标状态的hash,则直接输出步数。
Code
#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int n=4;int st,en;char s[5];int used[1<<16];int dir[10]={-1,1,-4,4};int bfs(int u){ queue<int>Q; used[u]=1; Q.push(u); while(!Q.empty()) { int k=Q.front(); Q.pop(); if(k==en) return used[k]-1; for(int i=0;i<n*n;i++) { if((k>>i)&1) { for(int j=0;j<4;j++) { if((i%4+dir[j]<0||i%4+dir[j]>3)&&j<2)continue; if((i+dir[j]<0||i+dir[j]>15)&&j>1)continue; if(!((k>>(i+dir[j]))&1)) { int x=(k^(1<<i))^(1<<(i+dir[j])); if(!used[x]) { used[x]=used[k]+1; Q.push(x); } } } } } }}int main(){ for(int i=1;i<=n;i++) { scanf("%s",s+1); for(int j=1;j<=n;j++) st=(st<<1)+s[j]-'0'; } for(int i=1;i<=n;i++) { scanf("%s",s+1); for(int j=1;j<=n;j++) en=(en<<1)+s[j]-'0'; } cout<<bfs(st)<<endl; return 0;}
0 0
- Bzoj 1054 [HAOI2008]移动玩具
- BZOJ 1054 [HAOI2008]移动玩具
- BZOJ 1054 [HAOI2008]移动玩具
- bzoj 1054 HAOI2008 移动玩具 暴力
- bzoj 1054: [HAOI2008]移动玩具 (bfs)
- 【BZOJ 1054】 [HAOI2008]移动玩具 bfs
- [BZOJ]1054: [HAOI2008]移动玩具BFS
- BZOJ 1054: [HAOI2008]移动玩具 BFS, Hash
- bzoj 1054: [HAOI2008]移动玩具.cpp
- 1054: [HAOI2008]移动玩具
- 1054: [HAOI2008]移动玩具
- 1054: [HAOI2008]移动玩具
- 1054: [HAOI2008]移动玩具
- BZOJ大视野 1054: [HAOI2008]移动玩具 解题报告
- 【BZOJ】1054 移动玩具
- bzoj 1054 移动玩具
- [BZOJ1054][HAOI2008]移动玩具
- BZOJ1054 [HAOI2008]移动玩具
- Codeforces 584 D. Dima and Lisa ( Codeforces Round #324 (Div. 2))
- set与map容器
- 有关++i和i++的效率之说
- struts2的date标签和其他标签
- python&django 常见问题及解决方法
- Bzoj 1054 [HAOI2008]移动玩具
- Scala学习笔记10【对象私有字段、Scala构造器、内部类】
- listview绑定数据并显示ImageList图片
- noip 金明的预算方案
- 【PAT】1100. Mars Numbers (20)
- 计数排序
- C#检测网络状态
- DFS POJ 1011 Sticks
- Linux内核工程导论——网络:IP:隧道