博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】1085 [SCOI2005]骑士精神(IDA*)
阅读量:5171 次
发布时间:2019-06-13

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

题目

 

 

分析

我好菜啊。

一波IDA*水过去了。

 

代码

#include 
using namespace std;const int maxn = 7;char s[maxn][maxn];int a[maxn][maxn], res=0;;int dx[10]={
1,-1,-1,1,2,-2,-2,2}, dy[10]={
2,2,-2,-2,1,1,-1,-1};int ans[maxn][maxn]={ {
0,0,0,0,0,0}, {
0,1,1,1,1,1}, {
0,0,1,1,1,1}, {
0,0,0,2,1,1}, {
0,0,0,0,0,1}, {
0,0,0,0,0,0}};int in(int x,int y) { return x>=1&&y>=1&&x<=5&&y<=5; }int check() { for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) if(a[i][j]!=ans[i][j]) return 0; return 1;}int g() { int tot=0; for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) if(a[i][j]!=ans[i][j]) tot++; return tot;}void Astar(int x,int y,int depth,int limit) { if(depth==limit) { if(check()) res=limit; return; } for(int i=0;i<8;i++) { int px=x+dx[i], py=y+dy[i]; if(!in(px,py)) continue; swap(a[px][py], a[x][y]); if(g()+depth <= limit) Astar(px,py,depth+1,limit); swap(a[px][py], a[x][y]); }}int main() { int sx,sy,t; scanf("%d",&t); while(t--) { res=0; for(int i=1;i<=5;i++) scanf("%s",s[i]+1); for(int ii=0;ii<=15;ii++) { for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) { if(s[i][j]=='1') a[i][j]=1; else if(s[i][j]=='0') a[i][j]=0; else { sx=i; sy=j; a[i][j]=2; } } Astar(sx,sy,0,ii); if(res) break; } if(!res) res--; printf("%d\n",res); } return 0;}

 

 

 

转载于:https://www.cnblogs.com/noblex/p/9726510.html

你可能感兴趣的文章
Jzoj5455【NOIP2017提高A组冲刺11.6】拆网线
查看>>
特定字符序列的判断(1028)
查看>>
华为面试
查看>>
平衡二叉树(AVL Tree)
查看>>
【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
查看>>
【CF799E】Aquarium decoration 线段树
查看>>
大运飞天 鲲鹏展翅
查看>>
从ECMA到W3C
查看>>
软件工程--第十六周学习进度
查看>>
yii2 ActiveRecord多表关联以及多表关联搜索的实现
查看>>
搜狗输入法安装--ubuntu
查看>>
ps/2接口键盘的输入及显示
查看>>
Swift———a Glance(极客学院)笔记
查看>>
【poj3294-不小于k个字符串中最长公共子串】后缀数组
查看>>
java如何获取其它用户登录的真是IP地址
查看>>
Jquery通过指定层次关系获取元素
查看>>
c# for 和 foreach 的区别
查看>>
docfx (一)
查看>>
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
查看>>
深度学习之前馈神经网络(前向传播和误差反向传播)
查看>>