[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 ...
随机推荐
- Windows7 64bits下安装TensorFlow GPU版本(图文详解)
不多说,直接上干货! Installing TensorFlow on Windows的官网 https://www.tensorflow.org/install/install_windows 首先 ...
- 暴力破解unix/linux平台上采用crypt加密的口令
# coding=utf-8 ''' 暴力破解crypt模块加密的密码 ''' import crypt import optparse usage = 'Usage: %prog [optinos] ...
- Android经常使用设计模式(二)
继上一篇 Android经常使用设计模式(一)里认识了观察者.适配器.代理等三种模式,这一篇将会解说下面三种模式: 工厂模式 单例模式 命令模式 1.工厂模式(Factory Pattern) 工厂模 ...
- 初探active mq
mq(message queue),即消息队列,目前比较流行消息队列是active mq 和kafka.本文介绍如何简单的使用active mq. ActiveMQ官网下载地址:http://acti ...
- 2016/04/13 ①html 中各种分割线------------------------------------------ ② 控制文字显示
①各种分割线Html代码 1.<HR> 2.<HR align=center width=300 color=#987cb9 SIZE=1>align 线条位置(可选left. ...
- 2016/2/29 html 思维导图
- 配置mahout
构建Mahout要求系统事先安装 1)JDK 1.6 或更高版本 2)Maven 2.0.9 或 2.0.10 Mahout是Hadoop的一种高级应用.运行Mahout需要提前安装好Hadoop.H ...
- id 查询
Ids Query | Elasticsearch Reference [6.2] | Elastic http://www.elastic.co/guide/en/elasticsearch/ref ...
- LIKIE INSTR
SELECT url FROM test_url WHERE FROM_UNIXTIME(create_time,'%Y%m%d %H') < '20171218 00' AND no ...
- 用css解决Unigui在IE系列浏览器中字体变小的问题(设置UniServeModule的customcss属性)
Unigui运行在chrome浏览器下可以有最佳的效果,但用ie打开用unigui做的项目会发现字体明显小一截,可以用自定义css来解决这个问题. 可以在UniServeModule的customcs ...