题目链接
http://noi-test.zzstep.com/contest/0x29%E3%80%8C%E6%90%9C%E7%B4%A2%E3%80%8D%E7%BB%83%E4%B9%A0/2907%20%E4%B9%B3%E8%8D%89%E7%9A%84%E5%85%A5%E4%BE%B5
分析
BFS裸题,每次向周边八个位置扩展即可。
AC代码
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; inline int read() { int num = 0; char c = getchar(); while (c < '0' || c > '9') c = getchar(); while (c >= '0' && c <= '9') num = num * 10 + c - '0', c = getchar(); return num; } const int maxn = 105; const int nxt[8][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}}; struct Node { int x, y; } st; int n, m, d[maxn][maxn], ans; char map[maxn][maxn]; queue<Node> q; inline int judge(int x, int y) { return x > 0 && x <= n && y > 0 && y <= m && map[x][y] != '*'; } inline void bfs() { memset(d, -1, sizeof(d)); d[st.x][st.y] = 0; q.push(st); while (!q.empty()) { Node u = q.front(), v; q.pop(); ans = max(ans, d[u.x][u.y]); for (int i = 0; i < 8; ++i) { v.x = u.x + nxt[i][0], v.y = u.y + nxt[i][1]; if (!judge(v.x, v.y)) continue; if (d[v.x][v.y] == -1) { d[v.x][v.y] = d[u.x][u.y] + 1; q.push(v); } } } } int main() { m = read(), n = read(); st.y = read(), st.x = read(); for (int i = 1; i <= n; ++i) scanf("%s", map[i] + 1); bfs(); printf("%d", ans); return 0; }
来源:51CTO
作者:Brute Force Kevin
链接:https://blog.csdn.net/weixin_45508368/article/details/100770338