Description

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

Input

第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位。两组数据之间没有空行。

Output

对于每组数据都输出一行。如果能在15步以内(包括15步)到达目标状态,则输出步数,否则输出-1。

启发式搜索

当前状态与目标状态相差n格则说明n-2步内不可能到达目标状态,

限制深度dfs,若经判断在限制步数内不能达到目标状态则剪枝,

逐步提高深度限制直至找到答案或深度到达15仍无解

#include<cstdio>
int n;
int ans[][]={
{,,,,},
{,,,,},
{,,,,},
{,,,,},
{,,,,}
};
int d,maxdep;
bool fo;
int now[][];
int x0,y0;
int xs[]={,,-,-,,,-,-};
int ys[]={,-,,-,,-,,-};
char c;
inline bool eq(){
for(int i=;i<;i++)
for(int j=;j<;j++)if(ans[i][j]!=now[i][j])return ;
return ;
}
inline void swap(int*a,int*b){
int t=*a;
*a=*b;
*b=t;
}
inline int minsteps(){
int a=-;
for(int i=;i<;i++)
for(int j=;j<;j++)if(ans[i][j]!=now[i][j])a++;
return a;
}
void dfs(int dep){
if(fo)return;
if(eq()){
fo=;
d=dep;
return;
}
for(int i=;i<;i++){
int x1=x0+xs[i],y1=y0+ys[i],x2=x0,y2=y0;
if(x1<||y1<||x1>||y1>)continue;
swap(now[x0]+y0,now[x1]+y1);
if(dep+minsteps()<maxdep){
x0=x1;y0=y1;
dfs(dep+);
x0=x2;y0=y2;
}
swap(now[x0]+y0,now[x1]+y1);
}
}
void readc(char&c){
while(c=getchar()){
if(c==''||c==''||c=='*')return;
}
}
int main(){
scanf("%d",&n);
while(n--){
for(int i=;i<;i++){
for(int j=;j<;j++){
readc(c);
now[i][j]=c==''?:c==''?:;
if(c=='*')x0=i,y0=j;
}
}
d=-;
fo=;
for(maxdep=;maxdep<=&&!fo;maxdep++)dfs();
printf("%d\n",d);
}
return ;
}

bzoj1085 骑士精神的更多相关文章

  1. bzoj1085骑士精神(搜索)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1893  Solved: 1051 Description ...

  2. BZOJ-1085 骑士精神

    估价函数其实就是与目标状态有几个不同... 迭代启发搜索. #include <cstdlib> #include <cstdio> #include <cstring& ...

  3. BZOJ-1085:骑士精神 (迭代加深 + A*搜索)

    题意:给定一个5*5的棋盘,上面有白马给妈给12匹,以及一个空格.问是否能在15步内有给定棋盘转移到目标棋盘. 如果可以,输出最小步数. 否则输出-1: 思路:由于步数比较小,我们就直接不记录状态vi ...

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

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

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

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

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

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

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

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

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

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

  9. BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...

随机推荐

  1. git的搭建与简单实用

    svn是中央集中版本,所有的人都下载同一个版本去更新,git是分布式的,可以现在自己想要的分支.svn集中式版本控制系统不但速度慢,而且必须联网才能使用git系统的安全性高.git及其强大的分支管理g ...

  2. 返回书签 GotoBookmark

    property Bookmark: TBookmark read GetBookmark write GotoBookmark; 直接给Bookmark属性赋值,还是 调用数据集GotoBookma ...

  3. 全球信息安全会议 Top 50

    信息安全会议在世界范围内举办,下面是全球最值得参加的50个信息安全会议的简介,以时间顺序列出.需要注意的是,这份清单基于2016年的信息撰写,因为具体日期与地点每年或有不同,请至活动官网确认具体的日期 ...

  4. MyEclipse移动开发教程:设置所需配置的iOS应用(一)

    MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] 一.iOS应用程序配置要求 这个进程需要四个需求数据文件: 证书签名请求(CSR)文件 证书签名请 ...

  5. LinkedStack<T>

    public class LinkedStack<T> { private static class Node<U> { U item; Node<U> next; ...

  6. webpack 性能优化 -- 待续

    文章 这篇文章挺不错的, 各方面优化都提到了, 有空研究下 文章 这个文章提出 , 增量打包用 webpack-watch 会让你打包速度飞快,  react不参与打包, 不require, 而是放在 ...

  7. SDWebImage导入问题

    最新的SDWebImage由于是基于ARC模式写的,如果创建的是非ARC醒目的童鞋们注意,导入文件夹之后,先添加ImageIO.framework,mapKit.framework这两个库,在非ARC ...

  8. 使用adb命令对手机进行截屏保存到电脑,SDCard

    adb shell /system/bin/screencap -p /sdcard/screenshot.png(保存到SDCard) adb pull /sdcard/screenshot.png ...

  9. Ascii vs. Binary Files

    Ascii vs. Binary Files Introduction Most people classify files in two categories: binary files and A ...

  10. Iterator、Iteratable与ListIterator

    Iteratable: public interface Iterable<T> { Iterator<T> iterator(); default void forEach( ...