from collections import deque
from itertools import combinations
n, m = map(int, input().split())
board = []
for i in range(n):
data = list(map(int, input().split()))
board.append(data)
b=[] # Empty Space의 모든 좌표
for i in range(n):
for j in range(m):
if board[i][j]==0:
b.append([i,j]) # 빈칸인 좌표를 저장
test = list(combinations(b,3)) # 이 좌표 중 3개를 뽑을 수 있는 모든 경우의 수 저장
ax = [0,0,1,-1]
ay = [1,-1,0,0]
def bfs():
while len(a):
x,y = a.popleft()
state[x][y] = 1
for i in range(4):
new_x = x+ax[i]
new_y = y+ay[i]
if new_x <= -1 or new_y <= -1 or new_x >= n or new_y >= m:
continue
if state[new_x][new_y]==0:
if board[new_x][new_y]==0:
state[new_x][new_y]=1
a.append(([new_x,new_y]))
ans = []
for c in test: # 새로 벽을 세울 모든 경우의 수
a=deque()
state = [[0]*m for i in range(n)]
for i in range(n):
for j in range(m):
if board[i][j]==2: # 바이러스 좌표를 queue에 추가
a.append([i,j])
elif board[i][j]==1: # 벽인 경우는 이동이 불가하므로 방문처리
state[i][j]=1
target1,target2,target3 = c # 새로 벽을 세운 좌표 역시 방문 처리
state[target1[0]][target1[1]] = 1
state[target2[0]][target2[1]] = 1
state[target3[0]][target3[1]] = 1
bfs() # 탐색
cnt=0
for p in range(len(state)): # 안전지대 개수 세기
cnt+=state[p].count(0)
ans.append(cnt) # 개수 추가
print(max(ans)) # 모든 케이스 중 가장 안전지대가 많은 케이스 출력
댓글남기기