题目传送门

乍一看好像是搜索题,但搜索明显会超时。

此处采用IDA*的方法求解。

IDA*算法就是基于迭代加深的A*算法。

code:

/**************************************************************
Problem: 1085
User: yekehe
Language: C++
Result: Accepted
Time:656 ms
Memory:1292 kb
****************************************************************/ #include <cstdio>
#include <string>
#include <iostream>
using namespace std; void swap(int &x,int &y){int t=x;x=y;y=t;} const int f[][]={{,,,,},{,,,,},{,,,,},{,,,,},{,,,,}};//目标状态
const int dx[]={,,,,-,-,-,-},dy[]={,-,,-,,-,,-}; int T,a[][],sx,sy,A;
string s;
bool W; int check()
{
for(int i=;i<;i++)
for(int j=;j<;j++)if(a[i][j]!=f[i][j])return ;
return ;
}//判断是否达到目标状态 int AS(int g)
{
int h=;
for(int i=;i<;i++)
for(int j=;j<;j++)
if(a[i][j]!=f[i][j])h++;
return h+g<=A;
}//A*剪枝 void dfs(int x,int y,int tot)
{
if(tot>A)return ;
if(check()){
if(tot==A)W=true;
return ;
}
if(W)return ;
for(int i=;i<;i++){
int fx=x+dx[i],fy=y+dy[i];
if(fx< || fx>= || fy< || fy>=)continue;
swap(a[x][y],a[fx][fy]);
if(AS(tot))dfs(fx,fy,tot+);
swap(a[x][y],a[fx][fy]);
}
return ;
} int main()
{
scanf("%d\n",&T);
while(T--){
W=;
for(int i=;i<;i++){
cin>>s;
for(int j=;j<;j++){
if(s[j]!='*')a[i][j]=s[j]-''+;
else sx=i,sy=j,a[i][j]=;
}
}
for(A=;A<=;A++){dfs(sx,sy,);if(W){printf("%d\n",A);break;}}//迭代
if(!W)puts("-1");
}
return ;
}

BZOJ1085_骑士精神_KEY的更多相关文章

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

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

  2. A*算法详解 BZOJ 1085骑士精神

    转载1:A*算法入门 http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx 在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算 ...

  3. 【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1085 囧啊囧,看了题解后写了个程序,但是样例总过不了T+T,调试了不下于1个小时,肉眼对拍看了根本看 ...

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

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

  5. 【BZOJ 1085】 [SCOI2005]骑士精神

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

  6. Codevs 2449 骑士精神 2005年省队选拔赛四川

    2449 骑士精神 2005年省队选拔赛四川 时间限制: 1 s 空间限制: 128000 KB 题目等级 : **大师 Master** 题目描述 Description 在一个5×5的棋盘上有12 ...

  7. BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )

    一开始写了个 BFS 然后就 T 了... 这道题是迭代加深搜索 + A* -------------------------------------------------------------- ...

  8. [bzoj1805][SCOI2005]骑士精神 [启发式搜索]

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

  9. 【日常学习】【IDA*】codevs2449 骑士精神题解

    题目描写叙述 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在不论什么时候一个骑士都能依照骑士的走法(它能够走到和它横坐标相差为1.纵坐标相差为2或 ...

随机推荐

  1. WAS缓存问题

    在项目中经常遇见这样的问题:修改应用的配置文件web.xml后,无论重启应用还是重启WebSphere服务器,都不能重新加载web.xml,导致修改的内容无效. 这个问题困扰了我好久,即使删除了${w ...

  2. Java关于日期时间的工具类

    import java.sql.Timestamp; import java.text.ParseException; import java.text.ParsePosition; import j ...

  3. Html5的本地储存 Web Storage

      Html5 中的存储包括两种:sessionStorage 和 localStorage   sessionStorage 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话 ...

  4. 转:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 解决方案

    转:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 解决方案javax.net.ssl.SSL ...

  5. UDP and TCP

    UDP unreliable, just add de-multiplexing and error checking on data than IP. Best effort datagram(数据 ...

  6. css左固定右自适应常用方法

    下面是几种方法的公用部分(右自适应也是一样的,换一下方向) html: <div class="demo"> <div class="sidebar&q ...

  7. Use PerfHUD ES to Do Frame Capture Android Game

    Author: http://www.cnblogs.com/open-coder/p/3898224.html Get Start This is short tutorial about how ...

  8. 动态树LCT(Link-cut-tree)总结+模板题+各种题目

    一.理解LCT的工作原理 先看一道例题: 让你维护一棵给定的树,需要支持下面两种操作: Change x val:  令x点的点权变为val Query x y:  计算x,y之间的唯一的最短路径的点 ...

  9. Windows系统常见问题

    1.Windows自动更新灰色不能修改HKEY_LOCAL_MACHINE/Software/Policies/Microsoft/WindowsWindowsUpdate的资料夹,在WindowsU ...

  10. javascript 时间倒计时效果

    <div id="divdown1"></div> <script language="javascript" type=&quo ...