반응형
n, m = map(int, input().split())
# 2차원 리스트의 맵 정보 입력받기
graph = []
for i in range(n):
graph.append(list(map(int, input())))
# DFS 깊이 우선 탐색을 통해 특정한 노드를 방문한 뒤에 연결된 모든 노드들도 방문
def dfs(x, y): # dfs 함수 정의
# 주어진 범위를 벗어나는 경우에는 즉시종료
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
# 모든 노드(위치)에 대하여 음료수 채우기
result = 0
for i in range(n):
for j in range(m):
# 현재 위치에서 DFS
if dfs(i, j):
result += 1
print(result)
반응형
'알고리즘 풀이 > DFS & BFS' 카테고리의 다른 글
[백준/Python] 1260번 : DFS와 BFS (0) | 2022.12.29 |
---|---|
[백준 / Python] DFS_2606번: 바이러스 (0) | 2022.12.29 |
[BFS] 24445번 : 알고리즘 수업 - 너비 우선 탐색 2 (0) | 2022.12.27 |
[BFS] 백준 24444번 (0) | 2022.12.27 |
BFS_미로탈출 이코테 (0) | 2022.12.27 |
댓글