HDU-1728---逃离迷宫(BFS)
逃离迷宫
给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的。我们假定给定的两个位置都是空地,初始时,gloria所面向的方向未定,她可以选择4个方向的任何一个出发,而不算成一次转弯。gloria能从一个位置走到另外一个位置吗?
Input
第1行为一个整数t (1 ≤ t ≤ 100),表示测试数据的个数,接下来为t组测试数据,每组测试数据中,
第1行为两个整数m, n (1 ≤ m, n ≤ 100),分别表示迷宫的行数和列数,接下来m行,每行包括n个字符,其中字符’.‘表示该位置为空地,字符’*'表示该位置为障碍,输入数据中只有这两种字符,每组测试数据的最后一行为5个整数k, x 1, y 1, x 2, y 2 (1 ≤ k ≤ 10, 1 ≤ x 1, x 2 ≤ n, 1 ≤ y 1, y 2 ≤ m),其中k表示gloria最多能转的弯数,(x 1, y 1), (x 2, y 2)表示两个位置,其中x 1,x 2对应列,y 1, y 2对应行。
Output
每组测试数据对应为一行,若gloria能从一个位置走到另外一个位置,输出“yes”,否则输出“no”。
Sample Input
2
5 5
…**
*..
…
…
…
1 1 1 1 3
5 5
…
*.*.
…
…
*…
2 1 1 1 3
Sample Output
no
yes
题意就是逃离迷宫,多加了一个拐弯次数。
大致代码和BFS差不多,就是把那一个if判断改成while就行了,每次一直走到头,然后再拐弯。。
Code:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int N=120;
char tu[N][N];
int vis[N][N];
int n,m;
int k,ex,ey,nx,ny;
int f;
int d[4][2]={0,1,1,0,0,-1,-1,0};
struct peo{int x,y;int zw;
};
void bfs(int x,int y)
{memset(vis,0,sizeof(vis));queue<peo> que;peo t,tt,ttt;t.x=x;t.y=y;t.zw=-1;que.push(t);vis[x][y]=1;while(!que.empty()){t=que.front();if(t.x==nx-1&&t.y==ny-1&&t.zw<=k){f=1;return ;}que.pop();for(int i=0;i<4;i++){int dx=t.x+d[i][0];int dy=t.y+d[i][1];while(dx>=0&&dx<n&&dy>=0&&dy<m&&tu[dx][dy]=='.'){if(!vis[dx][dy]){tt.x=dx;tt.y=dy;tt.zw=t.zw+1;vis[dx][dy]=1;que.push(tt);}dx=dx+d[i][0];dy=dy+d[i][1];}}}
}
int main()
{int T;cin>>T;while(T--){cin>>n>>m;for(int i=0;i<n;i++)for(int j=0;j<m;j++)cin>>tu[i][j];cin>>k>>ey>>ex>>ny>>nx;f=0;bfs(ex-1,ey-1);if(f)cout<<"yes"<<endl;else cout<<"no"<<endl;}return 0;
}
HDU-1728---逃离迷宫(BFS)相关推荐
- hdu 1728 逃离迷宫 (bfs)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU - 1728 逃离迷宫(bfs)
题目链接:点击查看 题目大意:给出起点和终点和最多的拐弯次数k,问拐弯次数能否在小于等于k的情况下从起点到达终点 题目分析:bfs,不过和以往的不太一样,以往的bfs都是每次加入一个点,而这个题目的限 ...
- HDU 1728 逃离迷宫(BFS的优化)
这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...
- HDU 1728 逃离迷宫【BFS】
题意:给出一个起点,一个终点,规定的转弯次数,问能否在规定的转弯次数内到达终点--- 这一题是学(看)习(题)的(解)@_@ 主要学了两个地方 一个是剪枝,如果搜到的当前点的转弯次数小于该点turn数 ...
- hdu 1728 逃离迷宫(dFS+优先队列)
求转弯最少的走路方式!!!! #include<stdio.h> #include<string.h> #include<queue> using namespac ...
- HDU 1728 逃离迷宫
给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...
- hdoj 1728 逃离迷宫
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU ACM 1728 逃离迷宫 (广搜BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输 ...
- hdu_1728_逃离迷宫(bfs)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...
- 逃离迷宫 ( BFS /DFS)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
最新文章
- 远程手机测试机房的建立
- 精通python要多久-精通python 或者R语言大约需要多长时间?怎样算精通?
- DataX在有赞大数据平台的实践
- 如何发布你的Android应用程序
- Python之路【第二篇】:Python基础(一)
- Apollo自动驾驶入门课程第②讲 — 高精地图
- linux 如何查看进程内用户虚拟空间分布
- AC日记——ISBN号码 openjudge 1.7 29
- Activity的生命周期方面复习笔记
- itools苹果录屏大师_录屏大师限免|2019年1月最后一次苹果精选限时免费App 0131...
- 分享:把个人网站封装生成百度小程序的方法
- html页面批量打印EMS快递单,如何批量打印快递单/电子面单?
- Android 百度地图api 问题 汇总
- 设计方面的优秀网站推荐QWQ
- CPU使用率100%怎么办
- matlab求x对应y值,matlab 不知道函数表达式,已知y值求x
- Matlab:数值积分与符号计算
- win10 蓝牙无法删除 完美解决方案
- 政务数据里的基础库、主题库、专题库
- 商战计划商业逻辑和商业模式