题目链接: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]骑士精神 搜索的更多相关文章

  1. BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】

    BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  2. BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1800  Solved: 984[Submit][Statu ...

  3. [BZOJ1085] [SCOI2005] 骑士精神 (A*)

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...

  4. bzoj1085 [SCOI2005]骑士精神——IDA*

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 搜索,IDA*,估价就是最少需要跳的步数: 代码意外地挺好写的,memcmp 用起来好 ...

  5. BZOJ1085: [SCOI2005]骑士精神

    传送门 dfs+A*优化. A*是人工智能算法,属于启发式搜索的一部分.第一次知道这个名词是在写虫食算的时候闵神说这个用A*搞跑的比谁都快..但是当时搜了很多资料想搞清楚这个东西,但是当时还是太拿衣服 ...

  6. BZOJ1085 [SCOI2005]骑士精神(IDA*)

    IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法. 这题代码量挺少的,可以看出整个IDA*的框架: #include<cstdio> #include<cstrin ...

  7. Luogu P2324 [SCOI2005]骑士精神 搜索

    刚开始写了个没迭代的...结果过了$qwq$ 然后迭个代..更快了.. #include<cstdio> #include<iostream> #define R regist ...

  8. 【BZOJ1085】[SCOI2005]骑士精神 双向BFS

    [BZOJ1085][SCOI2005]骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它 ...

  9. 【bzoj1085】[SCOI2005]骑士精神

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1757  Solved: 961[Submit][Statu ...

随机推荐

  1. iOS 开发小常识 开发笔记

    一   自定义push方法 /*  参数说明 *  controllerName : push的目标页 例:@“testcontroll”    ---注意不带.h *  isNibPage     ...

  2. OO模式-Composite

    组合模式也叫做"部分-总体"模式,这样事实上定义也就非常明显了,正好和数据结构的知识相相应.把对象组合成树形结构以表示"部分-总体"的层次结构. 先看类图: w ...

  3. c++学习笔记之基础---类内声明线程函数的调用

    近日需要将线程池封装成C++类,类名为Threadpool.在类的成员函数exec_task中调用pthread_create去启动线程执行例程thread_rounter.编译之后报错如下: spf ...

  4. linux php nginx php-fpm 关系 动态进程生成

    yum install php yum install php-fpm 启动fpm [root@VM_141_64_centos html]# service php-fpm restart Redi ...

  5. POJ3164 Command Network —— 最小树形图

    题目链接:https://vjudge.net/problem/POJ-3164 Command Network Time Limit: 1000MS   Memory Limit: 131072K ...

  6. HDU4027 Can you answer these queries? —— 线段树 区间修改

    题目链接:https://vjudge.net/problem/HDU-4027 A lot of battleships of evil are arranged in a line before ...

  7. YTU 2439: C++习题 复数类--重载运算符+

    2439: C++习题 复数类--重载运算符+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1022  解决: 669 题目描述 定义一个复数类Complex,重载运算符"+ ...

  8. 转【前端基础进阶之Promise】

    前言 Promise的重要性我认为我没有必要多讲,概括起来说就是必须得掌握,而且还要掌握透彻.这篇文章的开头,主要跟大家分析一下,为什么会有Promise出现. 在实际的使用当中,有非常多的应用场景我 ...

  9. ['1' for i in range(4)]

    ' for i in range(4)]) 结果: [']

  10. Bootstrap指定表格字段宽度

    默认情况下,表格会占据屏幕所有宽度,可以使用bootstrap的布局功能.但表格标题字段的宽度必须与相应字段内容的宽度一致. <div class="container"&g ...