[BZOJ1085][SCOI2005]骑士精神 搜索
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085
大的思路是迭代加深搜索,我们加一个明显的剪枝,当棋盘中位置不对的骑士的数目加上已经走的步数大于了限制的深度,就直接结束,然后……xjb搜就行了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int dx[]={-,-,,,,,-,-};
const int dy[]={,,,,-,-,-,-};
int T[][];
int g[][],mx;
bool inline cmp(){
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(g[i][j]!=T[i][j])
return false;
return true;
}
bool eva(int k){
int cnt=;
for(int i=;i<=;i++)
for(int j=;j<=;j++){
cnt+=g[i][j]!=T[i][j];
if(cnt+k>mx) return false;
}
return true;
}
bool dfs(int k,int x,int y){
if(x==&&y==&&cmp()) return true;
if(k>mx) return false;
for(int i=;i<=;i++){
int tx=x+dx[i],
ty=y+dy[i];
if(tx>=&&ty>=&&tx<=&&ty<=){
swap(g[tx][ty],g[x][y]);
if(eva(k-)&&dfs(k+,tx,ty)) return true;
swap(g[tx][ty],g[x][y]);
}
}
return false;
}
int main(){
int Test;
scanf("%d",&Test);
for(int i=;i<=;i++)
for(int j=;j<=i;j++)
T[i][j]=;
for(int i=;i<=;i++)
for(int j=;j>=i;j--)
T[i][j]=;
T[][]=;
T[][]=;
T[][]=-;
while(Test--){
char s[];
int sx,sy;
for(int i=;i<=;i++){
scanf("%s",s+);
for(int j=;j<=;j++){
if(s[j]=='') g[i][j]=;
else if(s[j]=='') g[i][j]=;
else{
g[i][j]=-;
sx=i;
sy=j;
}
}
}
bool flag=false;
for(int i=;i<=;i++){
mx=i;
if(dfs(,sx,sy)){
flag=true;
printf("%d\n",i);
break;
}
}
if(!flag) printf("-1\n");
}
return ;
}
[BZOJ1085][SCOI2005]骑士精神 搜索的更多相关文章
- BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- [BZOJ1085] [SCOI2005] 骑士精神 (A*)
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...
- bzoj1085 [SCOI2005]骑士精神——IDA*
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 搜索,IDA*,估价就是最少需要跳的步数: 代码意外地挺好写的,memcmp 用起来好 ...
- BZOJ1085: [SCOI2005]骑士精神
传送门 dfs+A*优化. A*是人工智能算法,属于启发式搜索的一部分.第一次知道这个名词是在写虫食算的时候闵神说这个用A*搞跑的比谁都快..但是当时搜了很多资料想搞清楚这个东西,但是当时还是太拿衣服 ...
- BZOJ1085 [SCOI2005]骑士精神(IDA*)
IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法. 这题代码量挺少的,可以看出整个IDA*的框架: #include<cstdio> #include<cstrin ...
- Luogu P2324 [SCOI2005]骑士精神 搜索
刚开始写了个没迭代的...结果过了$qwq$ 然后迭个代..更快了.. #include<cstdio> #include<iostream> #define R regist ...
- 【BZOJ1085】[SCOI2005]骑士精神 双向BFS
[BZOJ1085][SCOI2005]骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它 ...
- 【bzoj1085】[SCOI2005]骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1757 Solved: 961[Submit][Statu ...
随机推荐
- 2016/05/16 thinkphp3.2.2 验证码使用
Think\Verify类可以支持验证码的生成和验证功能. 生成验证码 下面是最简单的方式生成验证码: $Verify =new \Think\Verify(); $Verify->entry( ...
- JavaScript对象(复习笔记)
js对象 对象构造器 function person(firstname,lastname,age,eyecolor){ this.firstname=firstname; this.lastname ...
- XMU C语言程序设计实践(1)
题目: 任务1:英雄出世 炎热的夏天午后,小明正在百无聊赖地写c语言程序.忽然,电脑屏幕一阵抖动,浮现下面18×18个看似杂乱无章的数字: 32, 32, 32, 32, 32, 32, ...
- 网站图片增强JS插件2.0(兼容IE&FF)
网站图片增强JS插件2.0简单介绍:插件可以增强网站互动能力与外链建设,用户在欣赏图片的同时,把看好的图片直接制作成自己喜欢的样式后通过QQ等传播,增强外链建设,通过用户互动创造外链.(支持:放大缩小 ...
- CodeForces-213E:Two Permutations(神奇的线段树+hash)
Rubik is very keen on number permutations. A permutation a with length n is a sequence, consisting o ...
- 【IOI 1998】 Picture
[题目链接] 点击打开链接 [算法] 线段树扫描线求周长并 [代码] #include <algorithm> #include <bitset> #include <c ...
- go语言godep使用命令
godep 看见他的star比govendor,所以我使用它.官方地址 https://github.com/tools/godep install 1 go get github.com/too ...
- npm i macaca-android -g 无法安装成功、安装成功后运行脚本提示app-debug.apk不存在的问题
转自https://testerhome.com/topics/8618Android 近期,macaca团队升级了macaca-android2.0.2和app-inspector1.2.28 ,导 ...
- 使用x-template 定义模板
demo <script type="text/x-template" id="myFirstScriptComponent"> <p> ...
- mybatis基础学习5-一对多和多对多(简写)
1:建实体类 建mysql表