Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- DFS
- join
- 수학
- GROUP BY
- 투포인터
- 브루트포스
- 에라토스테네스의 체
- 서브쿼리
- 우선순위큐
- 시뮬레이션
- 다시
- 그래프 탐색
- 자료구조
- MST
- 분할정복
- 플로이드-워셜
- 다익스트라
- 누적합
- 크루스칼
- BFS
- 그래프 이론
- 다이나믹 프로그래밍
- DP
- 재귀
- 트리
- 그리디
- 구현
- 다이나믹프로그래밍
- 백트래킹
- 해시
Archives
- Today
- Total
기록하고 까먹지 말기
DFS 응용문제(이코테) 본문
날짜 : 2022. 10. 08
사용 언어 : python
문제
코드
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 연산(상하좌우로 탐색)
dfs(x-1, y)
dfs(x+1, y)
dfs(x, y-1)
dfs(x, y+1)
return True
return False
# 상, 하, 좌, 우의 위치들도 모두 재귀적으로 호출
n, m = map(int, input().split())
graph = []
for i in range(n):
graph.append(list(map(int, input())))
# 모든 위치에 대하여 음료수 채우기
result = 0
for i in range(n):
for j in range(m):
# 현재 위치에서 DFS 수행
if dfs(i, j) == True:
print(i, j)
result += 1
print(result)
DFS
def dfs(graph, v, visited):
# 현재 노드를 방문 처리
visited[v] = True
print(v, end=' ')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]: # 노드 v와 연결된 다른 노드 체크
if not visited[i]:
dfs(graph, i, visited)
# 노드가 9개인 그래프
graph = [
[], # 아무것도 없음(인덱스 편의상 넣음)
[2, 3, 8], # 노드 1
[1, 7], # 노드 2
[1, 4, 5], # 노드 3
[3, 5], # 노드 4
[3, 4], # 노드 5
[7], # 노드 6
[2, 6, 8], # 노드 7
[1, 7] # 노드 8
]
# 각 노드가 방문한 정보를 표현
visited = [False] * 9
dfs(graph, 1, visited) # 1부터 시작하는 dfs 실행
BFS
from collections import deque
# BFS 메서드 정의
def bfs(graph, start, visited):
# 큐(queue) 구현을 위해 deque 라이브러리 사용
queue = deque([start])
visited[start] = True
while queue:
# 큐에서 하나의 원소를 뽑아 출력
v = queue.popleft()
print(v, end=' ')
# 아직 방문하지 않은 인접 원소들을 큐에 삽입
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
# 노드가 9개인 그래프
graph = [
[], # 아무것도 없음(인덱스 편의상 넣음)
[2, 3, 8], # 노드 1
[1, 7], # 노드 2
[1, 4, 5], # 노드 3
[3, 5], # 노드 4
[3, 4], # 노드 5
[7], # 노드 6
[2, 6, 8], # 노드 7
[1, 7] # 노드 8
]
# 각 노드가 방문한 정보를 표현
visited = [False] * 9
bfs(graph, 1, visited) # 1부터 시작하는 bfs 실행
알게된 점
참고 사이트
-