https://www.acmicpc.net/problem/2468
dfs(x,y):
if ( x <0 또는 x >= n ) 또는 ( y<0 또는 y>= n)
return
if visited[x][y] ==True
return
ary[x][y]-min<=0
return
visited[x][y] = True
dfs(x-1,y,min)
dfs(x+1,y,min)
dfs(x,y+1,min)
dfs(x,y-1,min)
for min 0~101
count =0
for i 0~n
for j 0~n
if visited[i][j] False and ary[i][j]>0
dfs(x,y,min)
count+=1
if count == 0
break
if max_result <count
max_result = count
print(max_result)
import sys
n = int(input())
ary = [list(map(int,sys.stdin.readline().split())) for _ in range(n)]
sys.setrecursionlimit(15000)
max_result = 0
def dfs(x,y,min):
if x == -1 or y == -1 or x ==len(ary) or y==len(ary):
return
if ary[x][y] -min<=0:
return
if visited[x][y] == True:
return
visited[x][y] = True
dfs(x-1,y,min)
dfs(x+1,y,min)
dfs(x,y+1,min)
dfs(x,y-1,min)
min = 0
for min in range(101):
count = 0
visited = [[False for j in range(n)] for i in range(n)]
for i in range(n):
for j in range(n):
if visited[i][j] == False and ary[i][j]-min>0:
dfs(i,j,min)
count +=1
if(count == 0):
break
if count>max_result:
max_result = count
print(max_result)