博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1054 [HAOI2008]移动玩具
阅读量:5147 次
发布时间:2019-06-13

本文共 1887 字,大约阅读时间需要 6 分钟。

1054: [HAOI2008]移动玩具

Time Limit: 10 Sec  Memory Limit: 162 MB

Description

  在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动
时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移
动到某人心中的目标状态。

Input

  前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。接着是一个空
行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。

Output

  一个整数,所需要的最少移动次数。

Sample Input

1111
0000
1110
0010
1010
0101
1010
0101

Sample Output

4

HINT

 

Source

 

Tips:

  因为这个4*4的矩阵最多只有 2^16 种状态,我们可以暴力BFS,用hash表去重就行了;

 

Code:

#include
#include
#include
#include
#include
using namespace std;int n,m,a[5][5],ans[5][5],st,ed,b[5][5];int hash,hashans,que[100008],dis[100008];char ch;map
q;void solve(int u){ for(int i=1;i<=4;i++) for(int j=1;j<=4;j++){ b[i][j]=u%2; u=u/2; }}int calc(){ int res=0,k=1; for(int i=1;i<=4;i++) for(int j=1;j<=4;j++){ res=res+k*b[i][j]; k<<=1; } return res;}int main(){ int k=1; for(int i=1;i<=4;i++){ for(int j=1;j<=4;j++){ scanf("%c",&ch); a[i][j]=ch-48; hash=hash+k*a[i][j]; k<<=1; } getchar(); } k=1; getchar(); for(int i=1;i<=4;i++){ for(int j=1;j<=4;j++){ scanf("%c",&ch); ans[i][j]=ch-48; hashans=hashans+k*ans[i][j]; k<<=1; } getchar(); } if(hash==hashans){ printf("0\n"); return 0; } q[hash]=1; que[1]=hash; dis[1]=0; st=0; ed=1; while(st
0&&!b[i-1][j]){ b[i-1][j]=1; hash=calc(); if(hash==hashans){ printf("%d",y+1); return 0; } if(q[hash]==0){ q[hash]=1; ed++; que[ed]=hash; dis[ed]=y+1; } b[i-1][j]=0; } if((j+1)<=4&&!b[i][j+1]){ b[i][j+1]=1; hash=calc(); if(hash==hashans){ printf("%d",y+1); return 0; } if(q[hash]==0){ q[hash]=1; ed++; que[ed]=hash; dis[ed]=y+1; } b[i][j+1]=0; } if((j-1)>0&&!b[i][j-1]){ b[i][j-1]=1; hash=calc(); if(hash==hashans){ printf("%d",y+1); return 0; } if(q[hash]==0){ q[hash]=1; ed++; que[ed]=hash; dis[ed]=y+1; } b[i][j-1]=0; } b[i][j]=1; } } }

 

转载于:https://www.cnblogs.com/WQHui/p/7535452.html

你可能感兴趣的文章
[python基础] python 2与python 3的区别,一个关于对象的未知的坑
查看>>
BZOJ 1251: 序列终结者 [splay]
查看>>
云的世界
查看>>
初识DetNet:确定性网络的前世今生
查看>>
5G边缘网络虚拟化的利器:vCPE和SD-WAN
查看>>
MATLAB基础入门笔记
查看>>
【UVA】434-Matty&#39;s Blocks
查看>>
五、宽度优先搜索(BFS)
查看>>
运行一个窗体直接最大化并把窗体右上角的最大化最小化置灰
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
WebForm——IIS服务器、开发方式和简单基础
查看>>
小实验3:实现haproxy的增、删、查
查看>>
Angular中ngModel的$render的详解
查看>>
读《格局》| 未到年纪的真理
查看>>
[转]《城南旧事》里的《送别》
查看>>
07动手动脑
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
OAuth2 .net MVC实现获取token
查看>>