逃离迷宫

给定一个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)相关推荐

  1. hdu 1728 逃离迷宫 (bfs)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  2. HDU - 1728 逃离迷宫(bfs)

    题目链接:点击查看 题目大意:给出起点和终点和最多的拐弯次数k,问拐弯次数能否在小于等于k的情况下从起点到达终点 题目分析:bfs,不过和以往的不太一样,以往的bfs都是每次加入一个点,而这个题目的限 ...

  3. HDU 1728 逃离迷宫(BFS的优化)

    这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...

  4. HDU 1728 逃离迷宫【BFS】

    题意:给出一个起点,一个终点,规定的转弯次数,问能否在规定的转弯次数内到达终点--- 这一题是学(看)习(题)的(解)@_@ 主要学了两个地方 一个是剪枝,如果搜到的当前点的转弯次数小于该点turn数 ...

  5. hdu 1728 逃离迷宫(dFS+优先队列)

    求转弯最少的走路方式!!!! #include<stdio.h> #include<string.h> #include<queue> using namespac ...

  6. HDU 1728 逃离迷宫

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...

  7. hdoj 1728 逃离迷宫

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. HDU ACM 1728 逃离迷宫 (广搜BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输 ...

  9. hdu_1728_逃离迷宫(bfs)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...

  10. 逃离迷宫 ( BFS /DFS)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

最新文章

  1. 远程手机测试机房的建立
  2. 精通python要多久-精通python 或者R语言大约需要多长时间?怎样算精通?
  3. DataX在有赞大数据平台的实践
  4. 如何发布你的Android应用程序
  5. Python之路【第二篇】:Python基础(一)
  6. Apollo自动驾驶入门课程第②讲 — 高精地图
  7. linux 如何查看进程内用户虚拟空间分布
  8. AC日记——ISBN号码 openjudge 1.7 29
  9. Activity的生命周期方面复习笔记
  10. itools苹果录屏大师_录屏大师限免|2019年1月最后一次苹果精选限时免费App 0131...
  11. 分享:把个人网站封装生成百度小程序的方法
  12. html页面批量打印EMS快递单,如何批量打印快递单/电子面单?
  13. Android 百度地图api 问题 汇总
  14. 设计方面的优秀网站推荐QWQ
  15. CPU使用率100%怎么办
  16. matlab求x对应y值,matlab 不知道函数表达式,已知y值求x
  17. Matlab:数值积分与符号计算
  18. win10 蓝牙无法删除 完美解决方案
  19. 政务数据里的基础库、主题库、专题库
  20. 商战计划商业逻辑和商业模式

热门文章

  1. 有缺陷的一元三次方程求解设计(盛金公式)
  2. 图像质量评价方法中客观评价方法又可以分为三类
  3. PE和GND之间如何连接
  4. How to WinFlash Caterpillar C15 ECM with CAT ET Flash Files
  5. android ios通用OTG,通杀iOS与Android 闪迪两款U盘直插手机实战
  6. 利用免费代理ip网站建立自己IP数据库
  7. frontpage 2003动态html效果,用好FrontPage2003的九大功能
  8. 前端歌谣的刷题之路-第八十五题-列表动态渲染
  9. jQuery slideToggle
  10. windows上搭建php虚拟主机