博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1085骑士精神
阅读量:6960 次
发布时间:2019-06-27

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

bzoj 1085骑士精神

在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘:为了体现出骑士精神,他们必须以最少的步数完成任务。

输入:

21011001*1110111010010000001011110*1011100101000100

输出:

7-1

思路

A*算法

#include
#include
#include
#include
using namespace std;char mp[5][6];int init[5][5]= {1,1,1,1,1, 0,1,1,1,1, 0,0,2,1,1, 0,0,0,0,1, 0,0,0,0,0 };int aim[5][5];int dirX[] = {1,1,-1,-1,2,2,-2,-2};int dirY[] = {2,-2,2,-2,1,-1,1,-1};int flag = 0,ans = 0;int cal() //估计接下来需要多少步{ int ans = 0; for(int i=0; i<5; i++) for(int j=0; j<5; j++) if(init[i][j]!=aim[i][j]) ans++; return ans;}void A_Star(int x,int y,int deep,int limit) { if(deep==limit) { if(!cal()) ans = deep; return ; } if(flag) return ; for(int i=0; i<8; i++) { int xx = x+dirX[i],yy = y+dirY[i]; if(xx<0||yy<0||xx>4||yy>4)continue; swap(init[x][y],init[xx][yy]); int G = cal(); if(G==0){flag = 1;} if(G+deep <= limit+1)A_Star(xx,yy,deep+1,limit); swap(init[x][y],init[xx][yy]); }}void solve(){ flag = 0; for(int i=0; i<5; i++) scanf("%s",mp[i]); int x,y; for(int i=0; i<5; i++) for(int j=0; j<5; j++) { if(mp[i][j]=='0')aim[i][j]=0; if(mp[i][j]=='1')aim[i][j]=1; if(mp[i][j]=='*')aim[i][j]=2,x=i,y=j; } for(int i=0; i<=15; i++) { if(!flag){ A_Star(2,2,0,i); if(flag)printf("%d\n",ans); } } if(flag==0)printf("%d\n",-1);}int main(){ int T; scanf("%d",&T); while(T--) solve(); return 0;}

转载于:https://www.cnblogs.com/xcantaloupe/p/11009890.html

你可能感兴趣的文章
天合光能组件出货引领印度太阳能市场 2016年市场份额达25.7%
查看>>
再战“6.18”销售额榜首,韩都衣舍究竟“凭什么!”
查看>>
黄秀杰教程之--Node使用小程序模板消息
查看>>
React Hooks
查看>>
关于抢购秒杀的实现思路与事例代码
查看>>
ttlsa教程系列之MySQL---mysql数据库监控
查看>>
centos安装pypy(含pypy下载地址)
查看>>
spring 的那些 processors
查看>>
使用kickstart服务全自动安装RHEL7.0系统
查看>>
MVC Cookie的使用
查看>>
VMware与Hyper-V不兼容
查看>>
OSX加载驱动提示invalid signature
查看>>
input按钮的background-image属性兼容性问题
查看>>
IE8、IE9下访问博客报不安全『博客帮助』文档
查看>>
HDU 5162
查看>>
Python 获取本机ip地址
查看>>
NO.1 关于禅道
查看>>
win-codeblocks-16.01
查看>>
Cacti中文版在Centos上的安装(1)
查看>>
转:路由器MTU值对于网络通讯的影响(解决部分网站打不开问题)
查看>>