代码
#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();
}
}