描述

500年前,Jesse是我国最卓越的剑客。他英俊潇洒,而且机智过人_

突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中。Jesse听说这个消息已经是两天以后了,他知道公主在迷宫中还能坚持T天,他急忙赶到迷宫,开始到处寻找公主的下落。

时间一点一点的过去,Jesse还是无法找到公主。最后当他找到公主的时候,美丽的公主已经死了。从此Jesse郁郁寡欢,茶饭不思,一年后追随公主而去了。T_T

500年后的今天,Jesse托梦给你,希望你帮他判断一下当年他是否有机会在给定的时间内找到公主。

他会为你提供迷宫的地图以及所剩的时间T。请你判断他是否能救出心爱的公主。

输入

题目包括多组测试数据。

每组测试数据以三个整数N,M,T(0<n, m≤20, t>0)开头,分别代表迷宫的长和高,以及公主能坚持的天数。

紧接着有M行,N列字符,由".","*","P","S"组成。其中

"." 代表能够行走的空地。

"*" 代表墙壁,Jesse不能从此通过。

"P" 是公主所在的位置。

"S" 是Jesse的起始位置。

每个时间段里Jesse只能选择“上、下、左、右”任意一方向走一步。

输入以0 0 0结束。

输出

如果能在规定时间内救出公主输出“YES”,否则输出“NO”。

样例输入

4 4 10

....

....

....

S**P

0 0 0

样例输出

YES

分析:

s1,自定义一个队列的数据结构来存放结点的信息。

s2,创建并初始化好地图和标记数组。

s3,先得到王子的位置,将它放入队列里。

s4,当队列不为空的时候,让第一个元素出队作为当前位置,在当前位置的上下左右进行寻找公主。如果遇到公主就返回当前位置的标记,如果遇到的不是围墙也不是已经标记过的结点就将其放入队列并且给予标记。

s5,重复第4步,直到找到公主或者队列为空为止。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int dir[4][2] = {1,0,-1,0,0,1,0,-1};
char map[1000][1000];//地图
int vis[1000][1000];//用来标记是否走过
int sx,sy,px,py,t,n,m,flag,f;
struct step
{
int x,y,s;
}; void bfs()
{
queue<step> q;
step p;
p.x = sx;
p.y = sy;
p.s = 0;
vis[sx][sy] = 1;
q.push(p);//起点入队 while(!q.empty()) //起点入队后开始循环
{
step p = q.front(); if(p.x==px && p.y==py)
{
flag =1;
if(p.s<=t)
{
f=1;
printf("YES\n");
break;
}
} step v;
for(int i=0 ; i<4 ; i++)
{
v.x = p.x + dir[i][0];
v.y = p.y + dir[i][1];
if(map[v.x][v.y]=='*') //路不通(有墙壁)
{
continue;
}
if(v.x>=0 && v.x<n && v.y>=0 && v.y<m && vis[v.x][v.y]==0)
{
v.s = p.s + 1;
q.push(v);
vis[v.x][v.y] = 1;
}
}
q.pop();
}
if(flag==0||f==0) //1.flag==0说明无法到达2.flag!=0,f==0,说明可以到达但是时间不够
{
printf("NO\n");
}
} int main()
{
while(cin>>m>>n>>t)
{
if(n==0&&m==0&&t==0)
{
break;
}
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
for(int i=0 ; i<n ; i++)
{
for(int j=0 ; j<m ; j++)
{
cin>>map[i][j];
if(map[i][j]=='S')
{
sx = i;
sy = j;
}
if(map[i][j]=='P')
{
px = i;
py = j;
}
}
}
flag = 0;
f = 0;
bfs();
}
}

TOJ 1005 Hero In Maze (深搜)的更多相关文章

  1. TOJ 4976: 新生数(深搜)

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4976 时间限制(普通/Java): ...

  2. TOJ 1220 填数字游戏 / 深搜

    填数字游戏 时间限制(普通/Java):1000MS/10000MS     运行内存限制:65536KByte 描述 有个小游戏,让你填写以下方框,要求: a1+a2+a3+M=b1+b2+b3+M ...

  3. TZOJ 3305 Hero In Maze II(深搜)

    描述 500年前,Jesse是我国最卓越的剑客.他英俊潇洒,而且机智过人^_^.突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中.Jesse听说这个消息已经是两天以后了,他急忙赶到迷宫,开 ...

  4. 【TOJ 3305】Hero In Maze II

    描述 500年前,Jesse是我国最卓越的剑客.他英俊潇洒,而且机智过人^_^.突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中.Jesse听说这个消息已经是两天以后了,他急忙赶到迷宫,开 ...

  5. hdu 1026:Ignatius and the Princess I(优先队列 + bfs广搜。ps:广搜AC,深搜超时,求助攻!)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  6. poj 3984 -- 迷宫问题 深搜

    迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...

  7. YTU 1006: Hero In Maze

    1006: Hero In Maze 时间限制: 1000 Sec  内存限制: 64 MB 提交: 72  解决: 22 题目描述 500年前,Jesse是我国最卓越的剑客.他英俊潇洒,而且机智过人 ...

  8. poj3083 Children of the Candy Corn 深搜+广搜

    这道题有深搜和广搜.深搜还有要求,靠左或靠右.下面以靠左为例,可以把简单分为上北,下南,左西,右东四个方向.向东就是横坐标i不变,纵坐标j加1(i与j其实就是下标).其他方向也可以这样确定.通过上一步 ...

  9. hdu 1010 Tempter of the Bone(深搜+奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

随机推荐

  1. 自定义类属性设置及setter、getter方法的内部实现

    属性是可以说是面向对象语言中封装的一个体现,在自定义类中设置属性就相当于定义了一个私有变量.设置器(setter方法)以及访问器(getter方法),其中无论是变量的定义,方法的声明和实现都是系统自动 ...

  2. PAT 甲级 1038 Recover the Smallest Number

    https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704 Given a collection of ...

  3. HDU 2115 I Love This Game

    http://acm.hdu.edu.cn/showproblem.php?pid=2115 Problem Description Do you like playing basketball ? ...

  4. 完整和增量备份MySQL脚本

    本文档采用mysqldump 对数据库进行备份,mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法 ...

  5. 解决爬虫浏览器中General显示 Status Code:304 NOT MODIFIED,而在requests请求时出现403被拦截的情况。

    在此,非常感谢 “完美风暴4” 的无私共享经验的精神    在Python爬虫爬取网站时,莫名遇到 浏览器中General显示  Status Code: 304 NOT MODIFIED 而在req ...

  6. error C2143: 语法错误 : 缺少“;”(在“类型”的前面)

    C编程老是遇到这个问题: 错误 error C2143: 语法错误 : 缺少“;”(在“类型”的前面) d:\kinectproject\ceshiglad\ceshiglad\shili.c ces ...

  7. Go语言【第十三篇】:Go语言递归函数

    Go语言递归函数 递归,就是在运行的过程中调用自己,语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recurs ...

  8. Go语言【第五篇】:Go条件语句

    Go语言条件 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句.下图展示了程序语言中条件语句的结构: Go语言提 ...

  9. vdbench和fio测试磁盘性能的对比总结

    一.安装 1.安装vdbench,首先安装java:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...

  10. wsgiref 源码解析

    Web Server Gateway Interface(wsgi),即Web服务器网关接口,是Web服务器软件和用Python编写的Web应用程序之间的标准接口. 想了解更多关于WSGI请前往: h ...