题面

传送门

分析

首先,直接搜索肯定会TLE
很容易想到用迭代加深的方法,限定搜索深度
但是,这样仍然不够,需要用启发式的方法优化
我们设计一个估价函数f(x)=g(x)+h(x)f(x)=g(x)+h(x)
g(x)g(x)是初始状态到当前状态的实际代价
h(x)h(x)是当前到目标的估计代价
如果f(x)=g(x)+h(x)>d(当前限定深度)f(x)=g(x)+h(x)>d(当前限定深度),则直接返回
h(x)h(x)函数如何设计?
h(x)h(x)不能劣于实际最优值,所以可设为当前状态与目标状态不同方格的数量

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 16
using namespace std;
int n=5;
int walkx[10]= {1,1,-1,-1,2,2,-2,-2};
int walky[10]= {2,-2,2,-2,1,-1,1,-1};
char now[maxn][maxn];
char final[maxn][maxn]= {{},{' ','1','1','1','1','1'},{' ','0','1','1','1','1'},{' ','0','0','*','1','1'},{' ','0','0','0','0','1'},{' ','0','0','0','0','0'}};
int is_same() {
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(now[i][j]!=final[i][j]) return 0;
}
}
return 1;
}
int h() { //估价函数
int cnt=0;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(now[i][j]!=final[i][j]) cnt++;
}
}
return cnt;
}
int ida(int deep,int limit,int x,int y) {
// printf("%d %d %d %d\n",deep,dasadfslimit,x,y);
// for(int i=1; i<=n; i++) {
// for(int j=1; j<=n; j++) {
// printf("%c",now[i][j]);
// }
// printf("\n");
// }
// printf("\n");
if(deep>limit) return 0;
if(deep==limit) {
if(is_same()) {
// for(int i=1; i<=n; i++) {
// for(int j=1; j<=n; j++) {
// printf("%c",now[i][j]);
// }
// printf("\n");
// }
return 1;
} else return 0;
}
int flag=0;
for(int i=0; i<8; i++) {
int xx=x+walkx[i],yy=y+walky[i];
if(xx<1||yy<1||xx>n||yy>n) continue;
swap(now[x][y],now[xx][yy]);
if(deep+h()<=limit) flag|=ida(deep+1,limit,xx,yy);
swap(now[x][y],now[xx][yy]);
}
return flag;
}
int t;
int main() {
scanf("%d",&t);
while(t--) {
int sx,sy;
for(int i=1; i<=5; i++) {
for(int j=1; j<=5; j++) {
cin>>now[i][j];
if(now[i][j]=='*') {
sx=i;
sy=j;
}
}
}
// for(int i=1; i<=n; i++) {
// for(int j=1; j<=n; j++) {
// printf("%c",final[i][j]);
// }
// printf("\n");
// }
for(int i=0; i<=16; i++) {
if(i==16) {
printf("-1\n");
break;
}
if(ida(0,i,sx,sy)) {
printf("%d\n",i);
break;
}
}
}
}

BZOJ 1085(IDA*)的更多相关文章

  1. Booksort POJ - 3460 (IDA*)

    Description The Leiden University Library has millions of books. When a student wants to borrow a ce ...

  2. UVA - 10384 The Wall Pusher(推门游戏)(IDA*)

    题意:从起点出发,可向东南西北4个方向走,如果前面没有墙则可走:如果前面只有一堵墙,则可将墙向前推一格,其余情况不可推动,且不能推动游戏区域边界上的墙.问走出迷宫的最少步数,输出任意一个移动序列. 分 ...

  3. 人类即将进入互联网梦境时代(IDA)

    在电影<盗梦空间>中,男主角科布和妻子在梦境中生活了50年,从楼宇.商铺.到河流浅滩.一草一木.这两位造梦师用意念建造了属于自己的梦境空间.你或许并不会想到,在不久未来,这看似科幻的情节将 ...

  4. [BZOJ 1085][SCOI2005]骑士精神(IDA*)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1085 分析: 首先第一感觉是宽搜,但是空间需要8^15*5*5,明显不够,又鉴于最大深 ...

  5. 【BZOJ】1085 [SCOI2005]骑士精神(IDA*)

    题目 传送门:QWQ 分析 我好菜啊. 一波IDA*水过去了. 代码 #include <bits/stdc++.h> using namespace std; ; char s[maxn ...

  6. 怒刷BZOJ记录(一)1001~1037

    我实在是太弱了...不滚粗只能刷BZOJ了...这里来记录每天刷了什么题吧. 2015-7-9 : 1001[BeiJing2006]狼抓兔子                 | 最大流练习(呃..其 ...

  7. POJ2286 The Rotation Game(IDA*)

    The Rotation Game Time Limit: 15000MS   Memory Limit: 150000K Total Submissions: 5691   Accepted: 19 ...

  8. poj2331 (IDA*)

    题意:给你k种管道,然后是每种的长度,每种的数量,求(x1,y1)到(x2,y2)所用管道的最少数量 思路: 最开始考虑的是直接bfs,但是没有成功. 然后发现可以先找x轴x1 到 x2 ,再找y轴y ...

  9. UVA-10384 The Wall Pushers (IDA*)

    题目大意:走迷宫,遇到墙时可以推着墙走,但墙后还是墙时便不能推.求出一条任意的最短路径. 题目分析:这道题出的比较人性,输入的时候便是将四周的墙用二进制数表示好了,其实这样减轻了做题人的负担.IDA* ...

随机推荐

  1. 【leetcode】1171. Remove Zero Sum Consecutive Nodes from Linked List

    题目如下: Given the head of a linked list, we repeatedly delete consecutive sequences of nodes that sum ...

  2. vue面试题专题

    1,v-if和v-show的作用是什么?有什么区别? v-if:        创建---删除,没有元素.切换开销大.适合不频繁切换的情况用. 例子:制作搜索框,导航栏和搜索框重叠的两个框,点击搜索图 ...

  3. linux运维、架构之路-cobbler无人值守

    一.cobbler介绍 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等 1.主要功能:①Cobbl ...

  4. AOP代理

  5. 开发工具Intellij IDEA:面板介绍

    一.面板说明 IDEA面板的全貌如下图 2|0 二.菜单栏 下面会简单介绍下一些常用的部分菜单使用,如有疑问或补充欢迎留言. (1).File文件 1. New:新建一个工程 可以新建project, ...

  6. POJ 3280 Cheapest Palindrome ( 区间DP && 经典模型 )

    题意 : 给出一个由 n 中字母组成的长度为 m 的串,给出 n 种字母添加和删除花费的代价,求让给出的串变成回文串的代价. 分析 :  原始模型 ==> 题意和本题差不多,有添和删但是并无代价 ...

  7. Finer Resolution Observation and Monitoring -Global Land Cover更精细的分辨率观测和监测-全球土地覆盖

    http://data.ess.tsinghua.edu.cn/ 全球土地覆盖数据是了解人类活动与全球变化之间复杂互动的关键信息来源.FROM-GLC(全球土地覆盖的精细分辨率观测和监测)是首个使用陆 ...

  8. AT2370 Piling Up

    https://www.luogu.org/jump/atcoder/2370 题解 答案不是\(2^{2m}\)因为每轮的第一次取球可能会不够. 我们可以设\(dp[i][j]\)表示到了第\(i\ ...

  9. [POJ1637]Sightseeing tour:混合图欧拉回路

    分析 混合图欧拉回路问题. 一个有向图有欧拉回路当且仅当图连通并且对于每个点,入度\(=\)出度. 入度和出度相等可以联想到(我也不知道是怎么联想到的)网络流除了源汇点均满足入流\(=\)出流.于是可 ...

  10. (贪心+队列)String

    http://acm.hdu.edu.cn/showproblem.php?pid=6586 将26个字母各自放入队列中,并记下每个位置各字母的后缀和.往k个位置贪心的放字母,先从a开始尝试.首先字母 ...