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])