题目描述:
给定一个 m x n 的矩阵,由若干字符 'X' 和 'O'构成,'X'表示该处已被占据,'O'表示该处空闲,请找到最大的单入口空闲区域。
解释:
空闲区域是由连通的'O'组成的区域,位于边界的'O'可以构成入口,单入口空闲区域即有且只有一个位于边界的'O'作为入口的由连通的'O'组成的区域。
如果两个元素在水平或垂直方向相邻,则称它们是“连通”的。输入描述:
第一行输入为两个数字,第一个数字为行数m,第二个数字列数n,两个数字以空格分隔,1 <= m, n <= 200,
剩余各行为矩阵各行元素,元素为'X' 或 'O',各元素间以空格分隔。
输出描述:
若有唯一符合要求的最大单入口空闲区域,输出三个数字,第一个数字为入口行坐标(范围为0~行数-1),第二个数字为入口列坐标(范围为0~列数-1),第三个数字为区域大小,三个数字以空格分隔;
若有多个符合要求的最大单入口空闲区域,输出一个数字,代表区域的大小;
若没有,输出NUL。
补充说明:
收起
示例1
输入:
4 4
X X X X
X O O X
X O O X
X O X X
输出:3 1 5
说明:存在最大单入口区域,入口行坐标3,列坐标1,区域大小5
示例2
输入:
4 5
X X X X X
O O O O X
X O O O X
X O X X O
输出:3 4 1
说明:存在最大单入口区域,入口行坐标3,列坐标4,区域大小1
示例3
输入:
5 4
X X X X
X O O O
X O O O
X O O X
X X X X
输出:NULL
说明:不存在最大单入口区域
示例4
输入:
5 4
X X X X
X O O O
X X X X
X O O O
X X X X
输出:3
说明:存在两个大小为3的最大单入口区域,两个入口横纵坐标分别为1,3和3,3
import sys
row_all, col_all = input().strip().split(" ")
row_all = int(row_all)
col_all = int(col_all)
data = []
for i in range(row_all):
col = input().strip().split(" ")
data.append(col)
node_list = list()
start_row = [0, row_all-1]
start_col = [0, col_all-1]
for row in start_row:
for col in range(col_all):
if data[row][col] == "O":
if (row, col) not in node_list:
node_list.append((r