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

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

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

搜索,求最优的就用BFS,记得判重复状态就好

 

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 char a[6][6],b[6][6]; 7 struct node{ 8 char a[6][6]; 9 }A,B,T,q[1000001];10 int Ans[1000001],dx[5]={
0,1,-1,0,0},dy[5]={
0,0,0,1,-1};11 bool f[1000001];12 int judge(node A)13 {14 int ans=0,base=1;;15 for (int i=1;i<=4;++i)16 for (int j=1;j<=4;++j)17 ans+=base*(A.a[i][j]-48),base*=2;18 return ans;19 20 }21 int main()22 {23 char ch[10];24 memset(A.a,-1,sizeof(a));25 memset(B.a,-1,sizeof(b));26 for (int i=1;i<=4;++i)27 {28 scanf("%s",ch);29 for (int j=1;j<=4;++j)30 A.a[i][j]=ch[j-1];31 }32 for (int i=1;i<=4;++i)33 {34 scanf("%s",ch);35 for (int j=1;j<=4;++j)36 B.a[i][j]=ch[j-1];37 }38 int head=0;39 int tail=1;40 q[1]=A;41 f[judge(A)]=true;42 if (judge(A)==judge(B))43 {44 printf("0");45 return 0;46 }47 do48 {49 ++head;50 node T=q[head];51 for (int i=1;i<=4;++i)52 for (int j=1;j<=4;++j)53 if (T.a[i][j]=='1')54 for (int k=1;k<=4;++k)55 if (T.a[i+dx[k]][j+dy[k]]=='0')56 {57 swap(T.a[i][j],T.a[i+dx[k]][j+dy[k]]);58 int x=judge(T);59 if (!f[x])60 { 61 ++tail;62 q[tail]=T;63 f[x]=true;64 Ans[tail]=Ans[head]+1;65 if (x==judge(B))66 {67 printf("%d",Ans[tail]);68 return 0;69 } 70 }71 swap(T.a[i][j],T.a[i+dx[k]][j+dy[k]]);72 }73 }while (head

 

转载于:https://www.cnblogs.com/refun/p/8678522.html

你可能感兴趣的文章
Nginx服务状态的监控
查看>>
pycharm工具下代码下面显示波浪线的去处方法
查看>>
C#高级编程9 第17章 使用VS2013-C#特性
查看>>
对软件工程这门课的收获与总结
查看>>
磁盘与目录的容量(转)
查看>>
【SpringBoot】在IOC之外的类中使用IOC内部的Bean
查看>>
android--Activity有返回值的跳转
查看>>
Fiddle:使用断点:bpu,bpafter
查看>>
Codeforces VK Cup 2015 A.And Yet Another Bracket Sequence(后缀数组+平衡树+字符串)
查看>>
spring+springMvc+struts的SSH框架整合
查看>>
二叉树 - 已知前中,求后序遍历
查看>>
Linux 内核
查看>>
解决php连接mysql数据库中文乱码问题
查看>>
OO第二单元作业小结
查看>>
vue之安装配置
查看>>
angular之两种路由
查看>>
java反射机制续
查看>>
子矩阵
查看>>
面试体验:Facebook 篇(转)
查看>>
Data type confusion: what is an int(11)?
查看>>