import copy
import sys
from collections import deque
# ์์ ์
๋ ฅ
row,col= map(int,input().split())
_map = [[0]*col for _ in range(row)]
for i in range(row):
info = list(map(int,sys.stdin.readline().split()))
for j in range(col):
_map[i][j]=info[j]
queue = deque([])
# ๋ฐ์ด๋ฌ์ค ์์น ์ ์ฅ
for i in range(row):
for j in range(col):
if _map[i][j] == 2:
queue.append([i,j])
dr = [1,-1,0,0]
dc = [0,0,1,-1]
ans = -1e9
def getSafeArea(copiedMap):
num = 0
for i in range(row):
num+=copiedMap[i].count(0)
return num
# ๋ฐ์ด๋ฌ์ค ํผํธ๋ฆฌ๊ธฐ bfs()
def bfs():
virus = copy.deepcopy(queue)
copiedMap = copy.deepcopy(_map)
while len(virus) !=0:
r,c = virus.popleft()
for i in range(4):
nr = r + dr[i]
nc = c + dc[i]
if 0<=nr<row and 0<=nc<col and copiedMap[nr][nc]==0:
virus.append([nr,nc])
copiedMap[nr][nc]=2
return getSafeArea(copiedMap)
# ๋ฒฝ 3๊ฐ๋ฅผ ์ธ์๋ณด๊ธฐ
def bt(num):
global ans
if num == 3:
ans = max(ans,bfs())
return
for i in range(row):
for j in range(col):
if _map[i][j] !=0:
continue
_map[i][j]=1
bt(num+1)
_map[i][j]=0
bt(0)
print(ans)
๋ฌธ์ ์ ๊ทผ ๋ฐฉ๋ฒ
1. ๋ฐ์ด๋ฌ์ค๊ฐ ๋งต ์ ๋ฐ์ ํผ์ ธ์์ผ๋ฏ๋ก, bfs()๋ฅผ ์คํ์ํค๊ธฐ ์ ์ขํ๋ฅผ ์ถ์ถํด์ queue์ ๋ด๊ณ bfs()๋ฅผ ํ ๋๋ง๋ค deepcopy๋ฅผ ํด์ผ๊ฒ ๋ค.
2. ๋งต์ 0 ์ธ ์ง์ ์ ๋ฒฝ์ ์ธ์๋ณด๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฑํธ๋ํน ๋ฐฉ์์ผ๋ก ๊ตฌํด์ผ๊ฒ ๋ค. ๋ฒฝ์ 3๊ฐ ์ธ์ด ์์ ์์ bfs()๋ก ๋ฐ์ด๋ฌ์ค๋ฅผ ํผ๋จ๋ ค์ผ ๊ฒ ๋ค.
3. ๋ฐ์ด๋ฌ์ค๋ก ๋ค ํผ๋จ๋ฆฐ ๋ค์์ count() ํจ์๋ก ์์ ์์ญ์ธ 0์ ๊ตฌํด์ผ๊ฒ ๋ค.