46求助
查看原帖
46求助
673851
封禁用户楼主2022/7/8 22:35

如题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();
}
2022/7/8 22:35
加载中...