CodeVS 1215 迷宮 題解

#include <cstdio>
#include <iostream>
using namespace std;

const int dx[]={0, +1, 0, -1};
const int dy[]={-1, 0, +1, 0};

int M, N;
char maze[16+2][16+2];
bool flag[16+2][16+2];

struct NODE{
    int x, y;
}S, E;

bool check(int x, int y){
    if(maze[x][y]=='#') return false;
    if(flag[x][y]) return false;
    if(x<0 || y<0)return false;
    if(x>=N || y>=N) return false;
    return true;
}

bool Search(int x, int y){
    if(x==E.x && y==E.y) return true;
    for(int i = 0; i<4; ++i){
        if(check(x+dx[i], y+dy[i])){
            flag[x][y] = true;
            if(Search(x+dx[i], y+dy[i])) return true;
        }
    }
    return false;
}

int main(){
    scanf("%d", &M);
    for(int m = 1; m<=M; ++m){
        scanf("%d", &N);
        for(int y = 0; y<N; ++y)for(int x = 0; x<N; ++x){
            cin >> maze[x][y];
            if(maze[x][y]=='s') S.x = x, S.y = y;
            else if(maze[x][y]=='e') E.x = x, E.y = y;
        }
        flag[S.x][S.y] = true;
        if(Search(S.x, S.y)) printf("YES\n");
        else printf("NO\n");
        for(int y = 0; y<N; ++y)for(int x = 0; x<N; ++x) maze[x][y] = 0;
        for(int y = 0; y<N; ++y)for(int x = 0; x<N; ++x) flag[x][y] = false;
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章