import java.util.Scanner;
//查找单入口空闲区域
//深度优先遍历
public class Main{
private static int[][] direction={{0,1},{1,0},{0,-1},{-1,0}};//3.定义方向数组
private static int entryCount;
private static int mj;
private static int[] resultXY=new int[2];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()){
int m = in.nextInt(); //行
int n = in.nextInt();//列
//1.构建矩阵
char[][] grid=new char[m][n];
for (int i=0;i<m;i++){
for (int j=0;j<n;j++){
String next = in.next();
grid[i][j]=next.charAt(0);
}
}
int maxMj=0;
int xCol=-1;
int yCol=-1;
boolean larger=false;
//2.定义访问数组
boolean[][] visited=new boolean[m][n];
for (int i=0;i<grid.length;i++){
for (int j=0;j<n;j++){
entryCount=0; //每次循环重置
mj=0; //每次循环重置面积
dfs(grid,i,j,visited);
if (entryCount==1) {
if (mj>maxMj){
xCol=resultXY[0];
yCol=resultXY[1];
maxMj=mj;
larger=true;
}else if (mj==maxMj){
larger=false;
}
}
}
}
if (xCol!=-1&&yCol!=-1&&larger){
System.out.println(xCol+" "+yCol+" " +maxMj);
}
if ((xCol!=-1&&yCol!=-1&&!larger)){
System.out.println(maxMj);
}
if (xCol==-1&&yCol==-1){
System.out.println("NULL");
}
}
}
//4.dfs函数
public static void dfs(char[][] grid,int x,int y,boolean[][] visited){
//终止条件 ,该位置已经访问过 ,或者不是O
if (grid[x][y]=='X' ||visited[x][y]){
return;
}
//标记访问
visited[x][y]=true;
mj++;
if (x==0 ||x==grid.length-1||y==0 ||y==grid[0].length-1){
entryCount++; //找到一个边界的入口
resultXY[0]=x;
resultXY[1]=y; //记录坐标
}
//继续深搜其他方向
for (int[] dir : direction) {
int nextX=x+dir[0];
int nextY=y+dir[1];
//越界
if (nextX<0||nextX>grid.length-1||nextY<0||nextY>grid[0].length-1) continue;
dfs(grid,nextX,nextY,visited);
}
}
}
//查找单入口空闲区域
于 2025-06-04 20:32:29 首次发布