728x90
반응형
1. 그래프
그래프는 광범위한 분야에서 활용되고 있는 자료구조이다. 그러다보니 코딩테스트 문제 출제 1순위이다.
그래프는 정점과 간선의 집합으로 하나의 간선은 두 개의 정점을 연결한다.
그래프는 G=(V, E)로 표현하는데 간선에 방향이 있는 그래프를 방향그래프, 간선에 방향이 없는 그래프를 무방향그래프라고 한다.
V = 정점의 집합, E = 간선의 집합
2. 그래프 탐색
그래프에서는 너비우선탐색(BFS)과 깊이우선탐색(DFS) 방식으로 모든 정점을 방문할 수 있다.
2.0 그래프 코드
G = {
1: set([3, 5])
2: set([3, 4, 6]),
3: set([1, 2, 6]),
4: set([2]),
5: set([1]),
6: set([2, 3])
}
2.1 BFS
BFS는 큐를 사용해 임의의 정점(a)에서 시작해 정점(a)의 이웃하는 모든 정점(b)을 방문하고, 방문한 정점들(b)의 이웃 정점들(c)을 모두 방문하는 방식으로 그래프를 탐색한다.
BFS 코드
from collections import deque
def bfs(graphs, start):
que = deque([start]) # 탐색중인 큐
visited = [false for _ in range(len(graphs) + 1) # 방문 여부 확인
visited[start] = True
print_list = [] # 방문 순서 저장할 리스트
while que:
current_node = que.popleft() # 현재 노드
print_list.append(current_node) # 순서 저장
for next_node in graphs[current_node]: # 이웃한 노드들 방문
if not visited[next_node]: # 방문한 적 없는 노드라면
visited[next_node] = True
que.append(next_node) # 다음에 탐색하기 위해 큐에 넣기
print(" ".join(print_list))
2.2 DFS
DFS는 스택으로 임의의 정점(a)에서 시작하여 이웃하는 하나의 정점(b)을 방문하고, 방문한 정점(b)의 이웃 정점(c)을 방문하며, 더 이상 방문할 정점이 없다면 이전 정점으로 돌아오는 식으로 그래프를 탐색한다.
DFS 코드
def DFS(graphs, start):
stack = [start] # 탐색중인 스택
visited = [false for _ in range(len(graphs) + 1) # 방문 여부 확인
visited[start] = True
print_list = [] # 방문 순서 저장할 리스트
while stack:
current_node = stack.pop() # 현재 노드
print_list.append(current_node)
for next_node in graphs[current_node]:
if not visited[next_node]:
visited[next_node] = True
stack.extend(graphs[next_node))
print(" ".join(print_list))
728x90
반응형
'~2023' 카테고리의 다른 글
[네이버 부캠] 프로젝트1: 문장 간 유사도 측정(STS) 대회 정리 (0) | 2023.04.27 |
---|---|
[Git] 특정 버전으로 되돌리기 (0) | 2023.04.27 |
[VSCode] ssh 원격 접속하는 방법 (0) | 2023.04.26 |
[CS231n] Lecture 4. Backpropagation and Neural Networks (0) | 2023.04.25 |
[CS231n] Lecture 8. Deep Learning Software (0) | 2023.04.25 |