HDOJ(1728)逃离迷宫
HDOJ 1728
http://acm.hdu.edu.cn/showproblem.php?pid=1728
BFS求最少转过的弯
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
int map[][];
int w[][]; //记录到当前点已经转过个弯,初始化为-1,检测该点是否已遍历
struct node
{
int x;
int y;
}now,temp; int dx[]={,,,-};
int dy[]={,,-,};
int m,n;
bool BFS(int x1,int y1,int x2,int y2)
{
queue<node> q;
int i;
now.x=x1;
now.y=y1;
q.push(now);
while(!q.empty())
{
now=q.front();
for(i=;i<;i++) //向4个方向扩散搜索
{
temp.x=now.x+dx[i];
temp.y=now.y+dy[i];
while(temp.x>=&&temp.x<=n&&temp.y>=&&temp.y<=m&&map[temp.y][temp.x]!='*')
{
if(w[temp.y][temp.x]==-)
{
q.push(temp);
w[temp.y][temp.x]=w[now.y][now.x]+;
if(temp.x==x2&&temp.y==y2)
return true;
}
temp.x=temp.x+dx[i];
temp.y=temp.y+dy[i];
} //沿一个方向搜索
}
q.pop();
}
return false;
}
int main()
{
int t,i,j;
int k,x1,y1,x2,y2;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%*c",&m,&n);
for(i=;i<=m;i++)
{
for(j=;j<=n;j++)
{
scanf("%c",&map[i][j]);
}
getchar();
}
scanf("%d%d%d%d%d",&k,&x1,&y1,&x2,&y2);
memset(w,-,sizeof(w));
if(x1==x2&&y1==y2)
{
printf("yes\n");
continue;
}
if(BFS(x1,y1,x2,y2))
{
if(w[y2][x2]<=k)
printf("yes\n");
else
printf("no\n");
}
else
printf("no\n");
}
return ;
}
广度优先搜索:
- 从初始点开始,根据规则展开第一层节点,并检查目标节点是否在这些节点上,若没有,再将所有的第一层的节点逐一展开,得到第二层节点,如没有,则扩展下去,直到发现目标节点为止。
- 比较适合求最少步骤或最短解序列的题目。
- 一般设置一个队列queue ,将起始节点放入队列中,然后从队列头取出一个节点,检查是否是目标节点,如不是则进行扩展,将扩展出的所有节点放到队尾,然后再从队列头取出一个节点,直至找到目标节点。
HDOJ(1728)逃离迷宫的更多相关文章
- BFS HDOJ 1728 逃离迷宫
题目传送门 /* BFS:三维BFS,加上方向.用dp[x][y][d]记录当前需要的最少转向数 */ #include <cstdio> #include <algorithm&g ...
- hdoj 1728 逃离迷宫
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1728 逃离迷宫 bfs记转向
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Mem ...
- hdu 1728 逃离迷宫 bfs记步数
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Mem ...
- HDU 1728 逃离迷宫(DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) ...
- HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1728 逃离迷宫 [ dfs ]
传送门 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 1728:逃离迷宫(DFS,剪枝)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1728 逃离迷宫(DFS||BFS)
逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- hdu 1728 逃离迷宫 (BFS)
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
随机推荐
- VS2010 刷新工具箱(刷新自定义控件)
有时候自己自定义了控件,定义完后却不见工具箱中刷新出来自定义的控件,解决方案有了三种: 点评:在项目中增加了几个自定义控件,想在窗口上添加时却发现工具箱根本就没有些控件,晕了.记得2008都可以自动出 ...
- php7+apache2.4 (Windows7下),成功启动。(楼主另外提供了1个php7集成环境打包: http://pan.baidu.com/s/1qXwjpF2 ,如果你只是想了解一下,放在d盘根目录。)
php7正式版已经发布,性能是php5.4的2倍.博主入手php7 新鲜了一把,下面是解决问题之后成功启动php7的记录. ( 电脑必须win7 sp1, .netframework4 ) Windo ...
- Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理
转载请注明出处:http://www.cnblogs.com/xiaodf/ 之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主 ...
- 移动平台对 meta 标签的定义
一.meta 标签分两大部分:HTTP 标题信息(http-equiv)和页面描述信息(name). 1.http-equiv 属性的 Content-Type 值(显示字符集的设定) 说明:设定页面 ...
- uva674 Coin Change ——完全背包
link:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 修改pc机的mac地址 以及 mac地址的组成
在"开始"菜单的"运行"中输入regedit,打开注册表编辑器,展开注册表到:HKEY_LOCAL_ MACHINE/System/CurrentControl ...
- 数据库之mysql存储程序
什么时候会用到存储过程 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度2.当对数据库进行复杂操作时 ...
- HTTP POST GET详解
get /shang/a1.php http/1.1 host: localhost POST /shang/a1.php HTTP/1.1 Hos ...
- MyEclipse Spring 学习总结三 SpringMVC
MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...
- HttpRequest.UserAgent 属性 (System.Web)
获取客户端浏览器的原始用户代理信息.