hdu 1813(IDA*)
题目链接: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*)的更多相关文章
- HDU 1813 Escape from Tetris (IDA*)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1813 题意:给你一个n*n的迷宫,其中0代表有一个人在这个位置,1代表墙,现在要求一个路线,使所有的人通 ...
- hdu 2234(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234 思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者 ...
- hdu 1667(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1667 思路:大牛说是IDA*的入门题=.=构造h()=8-max(1,2,3); max(1,2,3 ...
- HDU 1813 Escape from Tetris
TMDTMD IDA*没跑了.什么是IDA*? 就是迭代深搜+A*估个价. 然而为什么调了一天? n<=2的时候我输出了东西.... 看了一天. #include<iostream> ...
- HDU - 1584 IDA*
思路:裸的IDA*,估计当前状态至少需要多少距离才能达到目标状态,剪枝即可.每一墩牌只需记录其最上面和最下面的牌型即可完成移动. AC代码 #include <cstdio> #inclu ...
- HDU - 3567 IDA* + 曼哈顿距离 + 康托 [kuangbin带你飞]专题二
这题难度颇大啊,TLE一天了,测试数据组数太多了.双向广度优先搜索不能得到字典序最小的,一直WA. 思路:利用IDA*算法,当前状态到达目标状态的可能最小步数就是曼哈顿距离,用于搜索中的剪枝.下次搜索 ...
- hdu 2918(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2918 思路:这道题与前面几道类似,可以说是被秒杀了!!!构造启发式函数h()=(cnt+3)/4(cn ...
- hdu 1560(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 思路:关键是启发式函数h()的构造,我们可以这样想:每次给主串增加一个字符和字符串的最后一位比较 ...
- HDU 1560 IDA*搜索
用N个串中找到最短的公共串(不要求连续,仅仅要相对位置一样就可以) 迭代加深搜索就可以 剪枝:当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回. #include "stdio ...
随机推荐
- DBCP( 二) DataBase Connection Pool 的使用
使用DBCP必须用的三个包: commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar. 配置参数. Java ...
- 解决ssh登录Host key verification failed
使用SSH登录某台机器,有时因为server端的一些变动,会出现以下信息: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: R ...
- powershell执行脚本
powershell执行脚本 执行powershell脚本有两种方式: 1.通过命令行参数启动脚本 C:\Windows\System32\WindowsPowerShell\v1.0\power ...
- 系统学习NIO
概述 适用于有一定编程基础的朋友,想系统学习NIO这块知识的朋友.知识点大体分3块:1:>概念了解(各类IO) 2>NIO的核心(缓存区,通道等) 3>网络IO 详细 代码下载:ht ...
- js闭包的应用
<ul id="ul1"> <li style="border:1px solid red;">1</li> <li ...
- 统计时间段内周分类SQL语句
declare @datefrom as datetime,@dateto as datetime set @datefrom='2015-04-12' set @dateto='2015-08-13 ...
- C#:xml操作(待补充)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...
- unity, 设置帧率上限
用unity做了个demo,把所有开销大的特效都去了,在真机上运行仍然卡.显示帧率来看,最高到30.原来unity在ios设备上帧率默认限制为不超过30. 可以通过Application.target ...
- [elk]elasticsearch dashboard+保留10天内索引+导入导出备份
es dashboard 有两款 head 这款我一直在用 https://github.com/mobz/elasticsearch-head 先修改es的配置文件: elasticsearch.y ...
- Nginx 1.5.2 + PHP 5.5.1 + MySQL 5.6.10 在 CentOS 下的编译安装
最近配置了几台Web服务器,将安装笔记贴出来吧.没时间像以前那样,将文章写的那样系统了,请见谅.详细配置,可以看以前的旧文章: http://blog.zyan.cc/nginx_php_v6 .安装 ...