Skip to content

07218:献给阿尔吉侬的花束

Bfs, http://cs101.openjudge.cn/practice/07218/

cpp
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>

using namespace std;

int main() {
    char map[201][201];
    bool vst[201][201] = {0};
    
    int n, x, y, r0, c0;
    cin >> n;
    for(int i = 0; i < n; i ++) {
        cin >> x >> y;
        memset(vst, 0, sizeof(vst));

        for(int r = 0; r < x; r ++) {
            for(int c = 0; c < y; c ++) {
                cin >> map[r][c];
                if(map[r][c] == 'S') {
                    r0 = r;
                    c0 = c;
                }
            }
        }

        queue<pair<int,int>> q;
        q.push({r0, c0});
        vst[r0][c0] = 1;
        int steps = 0;
        bool found = 0;
        while(!q.empty() && !found) {
            int k = q.size();
            for(int j = 0; j < k; j ++) {
                int curr = q.front().first;
                int curc = q.front().second;
                q.pop();
                if(map[curr][curc] == 'E') {
                    cout << steps << endl;
                    found = 1;
                    break;
                } if(curr > 0 && map[curr - 1][curc] != '#' && !vst[curr - 1][curc]) {
                    q.push({curr - 1, curc});
                    vst[curr - 1][curc] = 1;
                } if(curr < x - 1 && map[curr + 1][curc] != '#' && !vst[curr + 1][curc]) {
                    q.push({curr + 1, curc});
                    vst[curr + 1][curc] = 1;
                } if(curc > 0 && map[curr][curc - 1] != '#' && !vst[curr][curc - 1]) {
                    q.push({curr, curc - 1});
                    vst[curr][curc - 1] = 1;
                } if(curc < y - 1 && map[curr][curc + 1] != '#' && !vst[curr][curc + 1]) {
                    q.push({curr, curc + 1});
                    vst[curr][curc + 1] = 1;
                }
            }
            steps ++;
        }
        if(!found) cout << "oop!" << endl;

    }
    return 0;
}