ALGORITHMS/DFS
백준 2468 - 안전영역
로그앤
2022. 6. 25. 21:01
import sys
sys.setrecursionlimit(10000)
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def DFS(x,y,height):
global count
VIS[x][y] = True
if GRAPH[x][y] > height:
count+=1
#GRAPH[x][y] = -1
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N:
if GRAPH[nx][ny] > height and VIS[nx][ny] == False:
DFS(nx,ny,height)
# END FUNCTION
N = int(input())
GRAPH= [list(map(int,input().split())) for _ in range(N)]
FLAT = [j for temp in GRAPH for j in temp]
FLAT.sort()
L,H = FLAT[0], FLAT[-1]
ANS = []
MAX = -1
# ITERATE EACH HEIGHT
for height in range(L,H+1):
VIS = [[False] * N for _ in range(N)]
count = 0
NUM_HOUSE_PER_COMPONENT = []
for i in range(N):
for j in range(N):
if GRAPH[i][j] > height and VIS[i][j] == False:
DFS(i,j,height)
NUM_HOUSE_PER_COMPONENT.append((height,count))
#print(NUM_HOUSE_PER_COMPONENT)
ANS.append(len(NUM_HOUSE_PER_COMPONENT))
#print(ANS)
ANS.sort()
print(ANS[-1])