스택 자료구조 (or 재귀함수) 이용
def dfs(graph,v,visit):
visit[v] = True # 현재 노드 방문 처리
print(v, end = ' ')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visit[i]:
dfs(graph,i,visit)
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
# 각 노드가 방문된 정보를 표현 (index 0은 사용 X)
visit = [False] * 9
dfs(graph,1,visit)
def dfs(x,y):
# 주어진 범위를 벗어나면 종료
if x <= -1 or x >= n or y <= -1 or y >= m:
return False
# 현재 노드를 방문하지 않았을 때
if graph[x][y] == 0:
# 해당 노드 방문 처리
graph[x][y] = 1
# 상/하/좌/우 재귀로 호출
dfs(x-1,y)
dfs(x,y-1)
dfs(x+1,y)
dfs(x,y+1)
return True
return False
n,m = map(int,input().split())
graph = []
cnt = 0
for _ in range(m):
graph.append(list(map(int,input())))
for i in range(n):
for j in range(m):
if dfs(i,j) == True:
cnt += 1
print(cnt)