#include <iostream>
#include "vector"
using namespace std;
void dfs(vector<vector<char>>& vec, int x,int y, int row,int col, int& count, int& boardercount) {
if (x == 0 || y == 0 || x == row-1 || y == col-1) {
boardercount++;
}
vec[x][y] = 'X';
count++;
if (x-1 >= 0 && vec[x-1][y] == 'O' ) dfs(vec,x-1,y,row,col,count,boardercount);
if (x+1 < row && vec[x+1][y] == 'O') dfs(vec,x+1,y,row,col,count,boardercount);
if (y-1 >= 0 && vec[x][y-1] == 'O') dfs(vec,x,y-1,row,col,count,boardercount);
if (y+1 < col && vec[x][y+1] == 'O') dfs(vec,x,y+1,row,col,count,boardercount);
return;
}
int main() {
int row,col;
while (cin >> row >> col) { // 注意 while 处理多个 case
vector<vector<char>> vec(row,vector<char>(col));
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[0].size(); j++) {
cin>>vec[i][j];
}
}
vector<vector<int>> result;
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[0].size(); j++) {
if ((i == 0 || j == 0 || i == row-1 || j == col-1) && vec[i][j] == 'O') {
int count = 0;
int boardercount = 0;
dfs(vec,i,j,row,col,count,boardercount);
// cout<<boardercount<<endl;
if (boardercount == 1) {
vector<int> res1;
res1.push_back(i);
res1.push_back(j);
res1.push_back(count);
result.push_back(res1);
}
}
}
}
int max = -1;
int max_count = 0;
vector<int> pos;
// for(int i = 0; i < result.size(); i++) {
// for (int j = 0; j < result[0].size(); j++) {
// cout<<result[i][j];
// }
// cout<<endl;
// }
for(int i = 0; i < result.size(); i++) {
if (result[i][2] > max) {
max = result[i][2];
pos = result[i];
}
}
for (int i = 0; i < result.size(); i++) {
if (result[i][2] == max) {
max_count++;
}
}
if (result.size() == 0) {
cout<<"NULL"<<endl;
}else if (max_count > 1) {
cout<<max<<endl;
} else {
cout<<pos[0]<<' '<<pos[1]<<' '<< pos[2];
}
}
}
// 64 位输出请用 printf("%lld")
查找单入口空闲区域OD
最新推荐文章于 2025-09-07 18:47:44 发布