re求助悬关
查看原帖
re求助悬关
1108078
nothing_exe_studio楼主2023/11/19 20:55

代码

#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Point {
    int x;
    int y;
};
bool isValid(int x, int y, int n, int m) {
    return x >= 0 && x < n && y >= 0 && y < m;
}
int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<char>> matrix(n, vector<char>(m));
    vector<vector<bool>> visited(n, vector<bool>(m, false));
    queue<Point> q;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) {
            cin >> matrix[i][j];
            if (matrix[i][j] == '#') {
                q.push({i, j});
                visited[i][j] = true;
            }
        }
    int dx[] = {-1, 1, 0, 0};
    int dy[] = {0, 0, -1, 1};
    vector<Point> directions;
    while (!q.empty()) {
        Point p = q.front();
        q.pop();
        for (int i = 0; i < 4; i++) {
            int nx = p.x + dx[i];
            int ny = p.y + dy[i];
            if (isValid(nx, ny, n, m) && !visited[nx][ny]) {
                visited[nx][ny] = true;
                directions.push_back({nx, ny});
                q.push({nx, ny});
            }
        }
    }
    int t = directions.size();
    cout << t << endl;
    for (int i = 0; i < t; i++) {
        cout << directions[i].x + 1 << " " << directions[i].y + 1 << " ";
        cout << q.front().x + 1 << " " << q.front().y + 1 << endl;
        q.pop();
    }
}
2023/11/19 20:55
加载中...