题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1813

思路:首先bfs预处理出‘0’到边界点最短距离,然后构造 h() 为所’0‘点逃离迷宫的最少步数的最大值。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define inf 1<<30
typedef pair<int,int>PP; struct Node{
int x,y;
}node[]; char str[][];
int map[][],Index[],dist[][];
int n,m,maxdeep;
int dir[][]={{,},{-,},{,},{,-}}; bool In_Edge(int x,int y)
{
if(x==||x==n||y==||y==n)return true;
return false;
} int bfs(int x,int y)
{
queue<PP>que;
que.push(make_pair(x,y));
int dd[][];
memset(dd,-,sizeof(dd));
dd[x][y]=;
while(!que.empty()){
x=que.front().first,y=que.front().second;
que.pop();
if(In_Edge(x,y))return dd[x][y];
for(int i=;i<;i++){
int xx=x+dir[i][],yy=y+dir[i][];
if(map[xx][yy]&&dd[xx][yy]==-){
dd[xx][yy]=dd[x][y]+;
que.push(make_pair(xx,yy));
}
}
}
return -;
} int Get_H(Node node[])
{
int max_dist=;
for(int i=;i<m;i++){
max_dist=max(max_dist,dist[node[i].x][node[i].y]);
}
return max_dist;
} bool IDA_star(int deep,Node node[])
{
if(Get_H(node)+deep>maxdeep)return false;
if(deep==maxdeep)return true; Node tmp_node[];
for(int i=;i<;i++){
Index[deep]=i;
for(int j=;j<m;j++){
int xx=node[j].x+dir[i][],yy=node[j].y+dir[i][];
if(In_Edge(node[j].x,node[j].y)||map[xx][yy]==){
tmp_node[j]=node[j];
}else
tmp_node[j].x=xx,tmp_node[j].y=yy;
}
if(IDA_star(deep+,tmp_node))return true;
}
return false;
} int main()
{
int t=;
while(~scanf("%d",&n)){
if(t++)puts("");
for(int i=;i<=n;i++){
scanf("%s",str[i]+);
for(int j=;j<=n;j++)map[i][j]=-(str[i][j]-'');
}
m=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(map[i][j]){
if(In_Edge(i,j))dist[i][j]=;
else {
dist[i][j]=bfs(i,j);
node[m].x=i,node[m++].y=j;
}
}else
dist[i][j]=inf;
}
}
if(m==)continue;
for(maxdeep=; ;maxdeep++){
if(IDA_star(,node))break;
}
for(int i=;i<maxdeep;i++){
if(Index[i]==)puts("east");
else if(Index[i]==)puts("north");
else if(Index[i]==)puts("south");
else if(Index[i]==)puts("west");
}
}
return ;
}

hdu 1813(IDA*)的更多相关文章

  1. HDU 1813 Escape from Tetris (IDA*)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1813 题意:给你一个n*n的迷宫,其中0代表有一个人在这个位置,1代表墙,现在要求一个路线,使所有的人通 ...

  2. hdu 2234(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234 思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者 ...

  3. hdu 1667(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1667 思路:大牛说是IDA*的入门题=.=构造h()=8-max(1,2,3);  max(1,2,3 ...

  4. HDU 1813 Escape from Tetris

    TMDTMD IDA*没跑了.什么是IDA*? 就是迭代深搜+A*估个价. 然而为什么调了一天? n<=2的时候我输出了东西.... 看了一天. #include<iostream> ...

  5. HDU - 1584 IDA*

    思路:裸的IDA*,估计当前状态至少需要多少距离才能达到目标状态,剪枝即可.每一墩牌只需记录其最上面和最下面的牌型即可完成移动. AC代码 #include <cstdio> #inclu ...

  6. HDU - 3567 IDA* + 曼哈顿距离 + 康托 [kuangbin带你飞]专题二

    这题难度颇大啊,TLE一天了,测试数据组数太多了.双向广度优先搜索不能得到字典序最小的,一直WA. 思路:利用IDA*算法,当前状态到达目标状态的可能最小步数就是曼哈顿距离,用于搜索中的剪枝.下次搜索 ...

  7. hdu 2918(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2918 思路:这道题与前面几道类似,可以说是被秒杀了!!!构造启发式函数h()=(cnt+3)/4(cn ...

  8. hdu 1560(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 思路:关键是启发式函数h()的构造,我们可以这样想:每次给主串增加一个字符和字符串的最后一位比较 ...

  9. HDU 1560 IDA*搜索

    用N个串中找到最短的公共串(不要求连续,仅仅要相对位置一样就可以) 迭代加深搜索就可以 剪枝:当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回. #include "stdio ...

随机推荐

  1. Flume入门:安装、部署

    一.什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original genera ...

  2. 【jquery操作cookie】JQuery中$.cookie()方法的使用(同名cookie会覆盖)

    jquery.cookie.js插件: <script type="text/javascript" src="js/jquery-1.6.2.min.js&quo ...

  3. 阿里云RDS实例内不同数据库之间的数据迁移

    适用场景 本文适用于使用DTS实现相同实例下库名不同的数据库之间的数据迁移.本文以使用DTS将同一RDS实例下的amptest库迁移到jiangliu_amptest库为例来说明如何使用DTS实现相同 ...

  4. 如何用php启动exe程序,并在进程中查看?

    function query_process($service) { /* **查看WINDOWS系统进程列表,并查找指定进程是否存在 */ $tasklist = $_SERVER["WI ...

  5. Linux下connect超时处理

    1.前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口.当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口.我们知道端口属于网络的传输层, ...

  6. Java程序(非web)slf4j整合Log4j2

    一.依赖包准备 //slf4j项目提供 compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' //log4j2项目提供 co ...

  7. 剑指offer代码 vs2013执行

    方法: 代码文件夹名称为:CodingInterviewChinese2-master 1. 用vs2013加载解决方案 .sln文件 2. 一个解决方案下面有多个项目,通过右键解决方案->属性 ...

  8. django.db.utils.OperationalError: no such table: auth_user

    关于使用django 首次创建超级管理员时,出现     django.db.utils.OperationalError: no such table: auth_user   错误 1.首先使用命 ...

  9. ubuntu16.04安装jekyll 3.3.1

    本次安装的ekyll为最新的3.3.1版本. 一.预备工作,因位jekyll需要很多软件的支持,所以准备工作要做足. Ruby (including development headers, v1.9 ...

  10. 安卓-APP安装后多个图标的解决

    原因是在不同Activity的intent中配置了多个LAUNCHER. <intent-filter> <action android:name="android.int ...