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. SharePoint 会话(Session)状态和状态服务

    1. 启用会话状态 Enable-SPSessionStateService –DefaultProvision 或 Enable-SPSessionStateService –DatabaseNam ...

  2. L222 词汇题

    Some psychologists argue that the traditional idea “spare the rod and spoil the child” is not ration ...

  3. django页面导出excel

    from django.http import HttpResponse from xlwt import * from io import BytesIO def excel_export(requ ...

  4. BZOJ3864: Hero meet devil【dp of dp】

    Description There is an old country and the king fell in love with a devil. The devil always asks th ...

  5. LG2024 [NOI2001]食物链

    拆点法 用并查集维护每种动物的同类.天敌.食物群 #include<cstdio> int fa[300005]; int n,k,ans; inline int read() { int ...

  6. PDFSharp生成PDF (转)

    http://www.cnblogs.com/zhouxin/p/3228108.html 在上面用OpenXML生成word后,原来利用Word2010里的导出成PDF功能就不能用. 然后找开源组件 ...

  7. BAT编程

    echo 表示显示此命令后的字符  echo off 表示在此语句后所有运行的命令都不显示命令行本身  @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响 ...

  8. TweenMax.allTo

    需要多个MC进行相同的缓动.比如下面这个游戏菜单.三个按钮的缓动是相同的,都缓动到同一个x坐标位置.然后同时有缓动出舞台. 如果有TweenLite实现的话,需要             if (is ...

  9. Composer 技巧(以 FastAdmin 项目为基础)(2018-12-25 更新)

    Composer 技巧(以 FastAdmin 项目为基础) 查看 FastAdmin 所有的已安装的 php 组件,如果不加 i 就是查看 composer.json 里的组件. composer ...

  10. FastAdmin 开发第一天:了解 FastAdmin 框架

    了解 FastAdmin 框架 后端组件 ThinkPHP 5 EasyWeChat qr-code 前端组件 AdminLTE bootstrap bootstrap-table jquery la ...