计蒜客- 迷宫中的英雄

计蒜客- 迷宫中的英雄

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

突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中。Jesse听说这个消息已经是两天以后了,他知道公主在迷宫中还能坚持T天,他急忙赶到迷宫,开始到处寻找公主的下落。 时间一点一点的过去,Jesse还是无法找到公主。最后当他找到公主的时候,美丽的公主已经死了。从此Jesse郁郁寡欢,茶饭不思,一年后追随公主而去了。T_T 500年后的今天,Jesse托梦给你,希望你帮他判断一下当年他是否有机会在给定的时间内找到公主。
他会为你提供迷宫的地图以及所剩的时间T。请你判断他是否能救出心爱的公主。

题目包括多组测试数据。 每组测试数据以三个整数N,M,T(00)开头,分别代表迷宫的长和高,以及公主能坚持的天数。 紧接着有M行,N列字符,由”.”,”“,”P”,”S”组成。其中 “.” 代表能够行走的空地。 “” 代表墙壁,Jesse不能从此通过。 “P” 是公主所在的位置。 “S” 是Jesse的起始位置。 每个时间段里Jesse只能选择“上、下、左、右”任意一方向走一步。 输入以0 0 0结束。

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

样例1

输入:

4 4 10
….
….
….
S**P
0 0 0
输出:

YES

蛋疼,确实是简单的bfs,不过这里有个坑,就是M和N的输入顺序。。。。
题目链接

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int sx, sy, gx, gy;
int N, M, T;
int book[222][222];
char s[222][222];
int next1[4][2] = {
    {0, 1},
    {1, 0},
    {0, -1},
    {-1, 0}
};
struct node {
    int x;int y;int T;
};
int bfs() {
    int res = 9999999;
    bool f = false;
    memset(book, 0, sizeof(book));
    queue<node> q;
    node n1;
    n1.x = sx;n1.y = sy;n1.T = 0;
    q.push(n1);
    book[sx][sy] = 1;
    while(q.size()) {
        node st = q.front();q.pop();
        if (st.x == gx && st.y == gy && st.T <= T) {
            puts("YES");
            f = true;
            break;
        }
        for (int i = 0; i < 4; i++) {
            int tx = st.x + next1[i][0], ty = st.y + next1[i][1];
            if (tx >= 0 && tx < N && ty >= 0 && ty < M && s[tx][ty] != '*' && book[tx][ty] == 0) {
                node n2;n2.x = tx;n2.y = ty;n2.T = st.T+1;
                book[tx][ty] = 1;
                q.push(n2);
            }
        }
    }
    if (!f) puts("NO");
    return res;
}
int main() {
    while(true) {
        scanf("%d%d%d", &M, &N, &T);getchar();
        if (N == 0 && M == 0 && T == 0) break;
        for(int i=0; i<N; i++){
            for(int j=0; j<M;j++){
                scanf("%c", &s[i][j]);
                if(s[i][j]=='S'){
                    sx = i; sy = j;
                }
                else if(s[i][j]=='P'){
                    gx = i; gy = j;
                }
            }
            getchar();
       }
      bfs();
   }
    return 0;
}

你可能感兴趣的:(计蒜客- 迷宫中的英雄)