若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

1006: Hero In Maze

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,461

题目描述

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

参考代码

#include <stdio.h>
#include <stdlib.h>
struct 
{
    int x,y;
    int pre;
}
qu[5000];
int main() 
{
    int i,j,di,m,n,t,x0,y0,x1,y1,xt,yt;
    int rear,front;
    int flag,step;
    char map[20][20];
    while(scanf("%d%d%d",&m,&n,&t),m||n||t) 
    {
        x0=y0=x1=y1=0;
        for (i=0; i<m; ++i) 
        {
            fflush(stdin);
            for (j=0; j<n; ++j) 
            {
                scanf("%c",&map[i][j]);
                if(map[i][j]=='S')
                                    x0=i,y0=j;
                if(map[i][j]=='P')
                                    x1=i,y1=j;
            }
        }
        rear=0;
        step=0;
        front=-1;
        qu[rear].x=x0;
        qu[rear].y=y0;
        qu[rear].pre=-1;
        map[x0][y0]=-1;
        flag=0;
        while(front!=rear) 
        {
            ++front;
            //判断是否找到终点
            xt=qu[front].x;
            yt=qu[front].y;
            if(xt==x1&&yt==y1) 
            {
                flag=1;
                break;
            }
            //向四个方向搜索
            for (di=0; di<4; ++di) 
            {
                switch(di) 
                {
                    case 0:
                                        xt=qu[front].x-1;
                    yt=qu[front].y;
                    break;
                    case 1:
                                        xt=qu[front].x+1;
                    yt=qu[front].y;
                    break;
                    case 2:
                                        xt=qu[front].x;
                    yt=qu[front].y+1;
                    break;
                    case 3:
                                        xt=qu[front].x;
                    yt=qu[front].y-1;
                    break;
                }
                if(map[xt][yt]=='.'||map[xt][yt]=='P') 
                {
                    ++rear;
                    qu[rear].x=xt;
                    qu[rear].y=yt;
                    qu[rear].pre=front;
                    map[xt][yt]=-1;
                }
            }
        }
        if(flag==1) 
        {
            while(front!=0) 
            {
                front=qu[front].pre;
                ++step;
            }
            if(step<=t)
                            printf("YESn");
            else
                printf("NOn");
        }
    }
    return 0;
}

解析

暂无

hustoj

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Dreams孤独患者 原站点 Skip
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist