1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| #include<iostream> #include<vector> #include<queue> const int maxx = 205; using namespace std; int n, m; int vis[maxx][maxx]; int dis[maxx][maxx]; int loc[4][4] = { {-1,0},{1,0},{0,1},{0,-1} }; char s[maxx][maxx]; int ans; void bfs(int ss,int sd) { queue<pair<int, int>> q; q.push(make_pair(ss, sd)); vis[ss][sd] = 1; while (!q.empty()) { int l = q.front().first; int r = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int u = l + loc[i][0]; int v = r + loc[i][1]; if (s[u][v] != '#' && u <= n && u > 0 && v <= m && v > 0&&vis[u][v]==0) { dis[u][v] = dis[l][r] + 1; if (s[u][v] == 'x') dis[u][v]++; vis[u][v] = 1; q.push(make_pair(u, v)); if (s[u][v] == 'r'&&dis[u][v]<ans) ans=dis[u][v]; } } } }
int main() { ios::sync_with_stdio(0); int ss, sd; while (cin >> n >> m) { memset(vis, 0, sizeof vis); memset(dis, 0, sizeof dis); ans = 99999; for (int i = 1; i <= n; i++) { cin >> (s[i] + 1); for (int j = 1; j <= m; j++) { if (s[i][j] == 'a') { ss = i; sd = j; } } } bfs(ss, sd); if (ans==99999) { cout << "Poor ANGEL has to stay in the prison all his life.\n"; } else cout <<ans << endl; } }
|