codevs 2449 骑士精神 (IDDfs)
/*
限制步数 写迭代加深
注意剪枝:当先步数+不同的个数-1>当前限制的步数 就cut
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#define limit 15
using namespace std;
int T,ans=,falg;
int xx[]={,-,-,-,-,,,,};
int yy[]={,-,,-,,,-,,-};
int s[][],get[][];
int target[][];
char si;
void Get_target()
{
target[][]=;target[][]=;target[][]=;target[][]=;target[][]=;
target[][]=;target[][]=;target[][]=;target[][]=;target[][]=;
target[][]=;target[][]=;target[][]=;target[][]=;target[][]=;
target[][]=;target[][]=;target[][]=;target[][]=;target[][]=;
target[][]=;target[][]=;target[][]=;target[][]=;target[][]=;
}
int Judge()
{
int ret=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(s[i][j]!=target[i][j])
ret++;
return ret;
}
void Dfs(int now,int x,int y,int sum)
{
if(falg)return;
int c=Judge();
if(now==sum)
{
if(c==)
ans=sum,falg=;
return;
}
if(now-+c>sum)return;
for(int i=;i<=;i++)
{
int nx=x+xx[i];
int ny=y+yy[i];
if(nx>&&nx<=&&ny>&&ny<=)
{
swap(s[x][y],s[nx][ny]);
Dfs(now+,nx,ny,sum);
swap(s[x][y],s[nx][ny]);
}
}
}
int main()
{
scanf("%d",&T);
Get_target();
while(T--)
{
int x,y;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cin>>si;
if(si=='*')x=i,y=j,get[i][j]=;
else get[i][j]=si-'';
}
for(int k=;k<=limit;k++)
{
falg=;ans=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
s[i][j]=get[i][j];
Dfs(,x,y,k);
if(ans==k)break;
}
if(ans<=)printf("%d\n",ans);
else printf("-1\n");
}
return ;
}
codevs 2449 骑士精神 (IDDfs)的更多相关文章
- Codevs 2449 骑士精神 2005年省队选拔赛四川
2449 骑士精神 2005年省队选拔赛四川 时间限制: 1 s 空间限制: 128000 KB 题目等级 : **大师 Master** 题目描述 Description 在一个5×5的棋盘上有12 ...
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
一开始写了个 BFS 然后就 T 了... 这道题是迭代加深搜索 + A* -------------------------------------------------------------- ...
- [bzoj] 1085 骑士精神 || ID-DFS
原题 找到最少的步数成为目标状态. IDDFS(限制层数的dfs)即可 #include<cstdio> #include<algorithm> using namespace ...
- 骑士精神 (codevs 2449)
题目描述 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标 ...
- BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...
- IDA*算法——骑士精神
例题 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- A*算法详解 BZOJ 1085骑士精神
转载1:A*算法入门 http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx 在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算 ...
- 【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 囧啊囧,看了题解后写了个程序,但是样例总过不了T+T,调试了不下于1个小时,肉眼对拍看了根本看 ...
随机推荐
- bc命令详解与实例
bc: bc 是一种高精度的可交互执行的计算机语言.它在一些浮点数的运算中应用广泛. 一般情况下我们直接输入 bc ,便可进入其工作环境.当然,它还有其他的参数 -h 显示帮助信息并退出 -i 强制进 ...
- jQuery 的ready事件和 JavaScript 的load事件对比
为了理解2个事件的异同,先了解一下HTML文档加载顺序 HTML DOM文档加载步骤 HTML DOM文档加载是按顺序执行的,这与浏览器的渲染方式有关,一般浏览器渲染操作的顺序大致按如下几个步骤 1, ...
- 文件操作1-php
is_file (PHP 3, PHP 4, PHP 5) is_file -- 判断给定文件名是否为一个正常的文件 说明 bool is_file ( string filename ) 如果文件存 ...
- 初涉JavaScript模式 (11) : 模块模式
引子 这篇算是对第9篇中内容的发散和补充,当时我只是把模块模式中的一些内容简单的归为函数篇中去,在北川的提醒下,我才发觉这是非常不严谨的,于是我把这些内容拎出来,这就是这篇的由来. 什么是模块模式 在 ...
- 删除左右两边的空格trim
js中却没有trim()/ltrim()和rtrim()内置方法,所以需要自己写 写成类的方法格式如下:(str.trim();) <script language="javascri ...
- 编写可维护的javascript代码--- 2015.11.21(基本格式化)
1.1 每行的编码需要控制在80字符. 1.2 改用:的地方必须用上. 1.3 缩进用2个制表符,不过4个也可以. 1.4 当代码一行显示不全需要折行显示,这里我暂且假定缩进为4个字符. 1.5 如果 ...
- C# ORM—Entity Framework 之Code first(代码优先)(二)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
- HDU 1005(周期问题)
HDU 1005 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descript ...
- C语言:Message类
message.h #ifndef MESSAGE_H #define MESSAGE_H #define TRUE 1 #define FALSE 0 typedef struct { int se ...
- 浅谈多核CPU、多线程、多进程
1.CPU发展趋势 核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核32线程),我们如何来面对这突如其 ...