如题Q_Q
#include <iostream>
#include <queue>
using namespace std;
char map[1024][1024];
int x, y, mx, my;
bool vis[1024][1024];
short dx[8] = { -1,0,1,-1,1,-1,0,1 };
short dy[8] = { 1,1,1,0,0,-1,-1,-1 };
class blocks {
public:
int x;
int y;
int steps = 0;
};
queue<blocks> que;
void kill(blocks b) {
for (int i = 0; i < 8; i++) {
if (!vis[b.x + dx[i]][b.y + dy[i]] && map[b.x + dx[i]][b.y + dy[i]] == '.') {
vis[b.x + dx[i]][b.y + dy[i]] = true;
que.push({ b.x + dx[i] ,b.y + dy[i] , b.steps + 1 });
}
}
}
int bfs() {
que.push({ mx,my,0 });
vis[mx][my] = true;
while (1) {
blocks b = que.front();
que.pop();
kill(b);
if (que.empty())
return b.steps;
}
}
int main() {
cin >> x >> y >> mx >> my;
for (int i = y; i >= 1; i--)
{
for (int j = 1; j <= x; j++)
{
cin >> map[i][j];
}
}
cout<<bfs();
}