//hdu 1728

//这个是一道很经典的迷宫题了,思路感觉。。。取起点和终点,判断连线是否超过n个弯,

//先是从起点出发,上下左右四个方向搜索,找到一条路,把那条路的第一个点压入队列

//然后沿着那个方向一直搜下去,直到不符合条件(4个方向都动不了),就从队列里面去首元素

//然后不断循环这个操作。。。。

#include <iostream>
#include <cstring>
#include <queue>
#include <stdio.h>
#include <algorithm>
using namespace std; char Map[110][110];
int vis[110][110];
int dx[]={0,0,-1,1};//两个数组是搜索的时候用
int dy[]={-1,1,0,0}; int k,x1,x2,y1,y2,i,side1,side2;
struct dot
{
int x,y,k;//k存放转弯数
}; void BFS(dot a,dot b)
{
int flag=0; vis[a.x][a.y]=1;//flag标记是否到达目标
dot m,n; m.x=a.x; m.y=a.y; m.k=-1;//m,n为中间变量
queue<dot>q; q.push(m);//将起点a(m)入队列
while(!q.empty())//别问为什么要用队列非空来做。。。书上写的,记住就ok,因为你还不是大牛
{
m=q.front();
q.pop(); if(m.x==b.x&&m.y==b.y&&m.k<=k) {flag=1; break;} n.k=m.k+1;//因为每次从队列取出首元素,这个时候已经增加了一个弯 for(i=0;i<4;i++)//开始搜索
{
int j=m.x+dx[i];
int l=m.y+dy[i];
while(j>=0&&j<side1&&l>=0&&l<side2&&Map[j][l]!='*')//判断条件
{
if(!vis[j][l])
{
vis[j][l]=1;
n.x=j;
n.y=l;
q.push(n);//如果没被标记,那么标记它,用n记下此时坐标值,压入队列中
}
j+=dx[i];//朝某个方向一直搜索
l+=dy[i];
}
}
}
if(flag==1) cout<<"yes\n";
else
cout<<"no\n";
} int main()
{
int t;
cin>>t;
while(t--)
{
memset(vis,0,sizeof(vis));
//memset(Map,0,sizeof(Map));
dot _m,_n;
cin>>side1>>side2;
for(i=0;i<side1;i++)
cin>>Map[i];
cin>>k>>y1>>x1>>y2>>x2;//要注意这个地方好坑人。。。。。
_m.x=x1-1; _m.y=y1-1;
_n.x=x2-1; _n.y=y2-1;
BFS(_m,_n);
}
return 0;
}

hdu 1728的更多相关文章

  1. HDU 1728 逃离迷宫

    [题目描述 - Problem Description] 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,glo ...

  2. HDU 1728:逃离迷宫(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description   给定一个m × n (m行, n列)的迷宫,迷宫中有 ...

  3. hdu - 1728逃离迷宫 && hdu - 1175 连连看 (普通bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 这两道题花了一下午的时候调试,因为以前做过类似的题,但是判断方向的方法是错的,一直没发现啊,真无语. 每个 ...

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

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

  5. HDU 1728 逃离迷宫(DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)  ...

  6. HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)

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

  7. hdu 1728 逃离迷宫 bfs记转向

    题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Mem ...

  8. HDU - 1728 逃离迷宫 【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1728 思路 BFS 一开始 从开始位置 往四周走 如果能走的话 这个时候 转弯次数都是0 我们的标记不 ...

  9. hdu 1728 逃离迷宫 bfs记步数

    题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Mem ...

随机推荐

  1. 由问题引出的fsck命令

    博客停了两天,今天打开linux虚拟机,突然间报错了,顿时心中一喜(是吗?),当时看了下错误说明,好像有关于时间的问题(某个时间是未来时间)..然后我就去兴匆匆的修改系统时间,重启...唉,没作用.只 ...

  2. JavaScript设计模式之单例模式

    一.单例模式概念 单例就是保证一个类只有一个实例,实现方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个 ...

  3. JS冒泡事件与处理

    JavaSciprt事件中有两个很重要的特性:事件冒泡以及目标元素. 事件冒泡: 当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发.这 一过程被 ...

  4. thinkphp 内置函数详解

    D() 加载Model类M() 加载Model类 A() 加载Action类L() 获取语言定义C() 获取配置值    用法就是   C("这里填写在配置文件里数组的下标")S( ...

  5. Android模拟器genymotion安装与eclipse 插件安装

    推荐一款Android模拟器"Genymotion",有点速度快,占用资源少,可整合eclipse.闲话少谈,看安装步骤. 1.下载地址:https://www.genymotio ...

  6. C:\WINDOWS\system32\config\systemprofile\Desktop引用了一个不可用的位置

    使用迅雷下载压缩文件到桌面时,下载完毕后,如果直接点击"打开文件",则迅雷会报错: C:\WINDOWS\system32\config\systemprofile\Desktop ...

  7. 在同个工程中使用 Swift 和 Objective-C(Swift 2.0更新)-b

    本节包含内容: Mix and Match 概述(Mix and Match Overview) 在同个应用的 target 中导入(Importing Code from Within the Sa ...

  8. treap修订

    #include<cstdio> #include<cmath> #include<algorithm> #include<ctime> #includ ...

  9. ubuntu14.04 为Firefox安装flash插件

    Ubuntu系统装好后,发现火狐浏览器播放不了视频,一直提示安装flash,但按照火狐浏览器上的提示Flash插件安装总是失败,那就只能手动安装了. (1) 去flash官网:http://get.a ...

  10. 【用PS3手柄在安卓设备上玩游戏系列】谈安卓游戏对手柄的支持

    不同的游戏对于手柄的支持程度是不一样的,对应所需要进行的手柄设置也不尽相同.我没有这样的时间和精力,针对每一款游戏去写博客,但找出不同游戏中的共同点,针对同一类的游戏去写博客,应该是可行的.我把安卓上 ...