描述

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. lintcode-151-买卖股票的最佳时机 III

    151-买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 注意事项 你不可以同时参与多笔交易(你必须在 ...

  2. .net控制台程序Program args参数解析

    一直很有疑问在控制台程序的Main函数中为什么会有个string[] args的参数,又没有什么用. static void Main(string[] args) { } 这几天需要将一个控制台程序 ...

  3. 最近面试js部分试题总结

    二,JavaScript面试题总结 1,首先是数组去重算法:给一个数组,去掉重复值 (function() { var arr = [1, 2, 3, 3, 4, ]; function unique ...

  4. python爬虫 --- 简书评论

    某些网站的一些数据是通过js加载的 ,所以爬取下来的数据拿不到, 找到评论的地址 .进行请求获取评论数据 #coding=utf-8 import json import requests def r ...

  5. netbeans调试配置

    apache端口8050,xdebug端口9000 1.把项目放到apache的htdocs下(一定要放在htdocs上,要么调试的时候xdebug会一直卡在“等待连接中”) 2.把php_xdebu ...

  6. 【python】用 sqlacodegen 将存在的数据库表 转化成model.py

    Flask的sqlalchemy对数据库表的模型提供了很多易用的方法.为了使用这些内容,需要将数据库表按照Flask识别的格式创建成Model,但是一般我们都是在已经创建好的数据库环境中开发Pytho ...

  7. [NOIP 2017]棋盘

    题目描述 有一个 m×m 的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向 ...

  8. Hcharts和Echarts----制作报表的工具

    Hcharts官网:https://www.hcharts.cn/Hcharts API文档:https://api.hcharts.cn/highcharts Echarts官网:http://ec ...

  9. 谈谈CSS中em与px的差异

    在国内网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位.只有百度好歹做了个可调的表率.而 在大洋彼岸,几乎所有的主流站点都使用em作为字体单位, ...

  10. UVA10766:Organising the Organisation(生成树计数)

    Organising the Organisation 题目链接:https://vjudge.net/problem/UVA-10766 Description: I am the chief of ...