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 ...
随机推荐
- Python 基礎 - pyc 是什麼
Python2.7 版中,只要執行 .py 的檔案後,即會馬上產生一個 .pyc 的檔案,而在 Python3 版中,執行 .py 的檔案後,即會產生一個叫 __pycache__ 的目錄,裡面也會有 ...
- PAT (Basic Level) Practise:1019. 数字黑洞
[题目链接] 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞” ...
- NSDictionary读取数据类型异常问题.
起因:做网络交互时,经常会使用JSON作为数据的承载体,本来是件好事,但是用多了,发现iOS侧偶尔会出现异常,几经比较发现是服务器给的数据有问题,该给INT的给按照STR给了,服务器能做动态更新,可客 ...
- ✡ leetcode 168. Excel Sheet Column Title 26进制数字 --------- java
Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...
- hive索引表
create table index_tmp(id int,name string,dt string) row format delimited fields terminated by ',' s ...
- hmtl初学
hmtl+css实现小车轮子转动! <!DOCTYPE html> <html> <head lang="en"> <meta ...
- C#中get和set的写法
class program{ private string name; public string XXXXXX{ get{return name;} set{name=value;} } } 在C# ...
- sql server Datetime格式转换
select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT( ...
- 黄聪:MySQL 按指定字段自定义列表排序
问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同): SELECT * FROM `MyTable` , , , ) ORDER BY `id` ASC ...
- Android开发艺术探索读书笔记——01 Activity的生命周期
http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...