A - 深さ優先探索: AtCoder Typical Contest 001

問題文

この問題は、講座用問題です。ページ下部に解説が掲載されています。 高橋君の住む街は長方形の形をしており、格子状の区画に区切られています。 長方形の各辺は東西及び南北に並行です。 各区画は道または塀のどちらかであり、高橋君は道を東西南北に移動できますが斜めには移動できません。 また、塀の区画は通ることができません。 高橋君が、塀を壊したりすることなく道を通って魚屋にたどり着けるかどうか判定してください。 atcoder

結果: WA

#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;
const int MAX = 50;
bool reacable[MAX][MAX] = {};

void search(int x, int y);
int R, C;

int main(){
    int sx, sy;
    int gx, gy;
    
    cin >> R >> C;

    for (int i =0; i <R; ++i) {
        for (int j =0; j <C; ++j) {
            cin >> map[i][j];
            if (map[i][j] == 's') {
                sx = i;
                sy = j;
            } else if (map[i][j] == 'g'){
                gx = i;
                gy = j;
            }
        }
    }
    
    search(sx, sy);
    
    if ( reacable[gx][gy] ) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
    
    return 0;
}

void search(int x, int y){
    if ( x <0 || y <0 || x >=R || y >=C || map[x][y] == '#') {
        return;
    }
    if ( reacable[x][y]) {
        return;
    }
    
    reacable[x][y] = true;
    
    search(x+1, y); //right
    search(x-1, y); //left
    search(x, y+1); //up
    search(x, y-1); //down
}