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;
}