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 ...
随机推荐
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板
java 利用spring JavaMailSenderImpl发送邮件,支持普通文本.附件.html.velocity模板 博客分类: Java Spring 本文主要介绍利用JavaMailS ...
- Mongodb在NUMA机器上的优化
10gen在mongodb的部署指南上,提到了在NUMA机器上,mongodb可能会出现问题,参见:http://docs.mongodb.org/manual/administration/prod ...
- Sublime Text 3安装插件指南
Sublime Text已经很用得很广泛,一般普通的功能已经够用,加入一些插件能些许加快开发. 安装 Package Control 有了插件控制器Package Control安装起来就很轻松了. ...
- 转 TextBox的EnableViewState属性问题
问题如下: ---------------------------------------------------------------------------------------------- ...
- C++ Primer : 第十四章 : 重载运算与类型转换之重载运算符
重载前须知 重载运算符是特殊的函数,它们的名字由operator和其后要重载的运算符号共同组成. 因为重载运算符时函数, 因此它包含返回值.参数列表和函数体. 对于重载运算符是成员函数时, 它的第一个 ...
- SpringMVC——form标签的使用
----------------------------------------------------------------------------------- <%@page impor ...
- 用多itemtype的具有addHeaderView的recyclerview,还是scrollview?
如果一个复杂的布局,1,轮播图,2,广告图,3,带标题的list,4,gridview布局,各种不同的布局 在最外层套一个scrollview,里面list 用for循环addView,gridvie ...
- mesos INSTALL
$ git clone https://github.com/mesosphere/playa-mesos $ cd playa-mesos $ vagrant up --provision
- Cookie初识篇
一.什么是Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109和2965都 ...
- bootstrap表格内容垂直居中
td{ vertical-align: middle !important;}