지난 학기 학교 알고리즘 수업을 수강하며, 정리 해 놓았던 마크다운 문서입니다. 문제시 삭제하겠습니다
Breadth-first search (BFS) and depth-first search (DFS)
정확히 한번 각각의 정점과 간선 방문하는 알고리즘 (O(n+m) time)
가정 : 방문할수있는 여러개 정점 있는경우 알파벳 작은거 부터 방문
->모든 정점 엣지 한번씩 순회 가능
최단 경로, 최단 거리를 구하려면 E,G 부분에서 d=무한대 로 저장하도록 계산
또한 각 노드에서 나를 탐색하게 한 정점에대한 정보 저장 할 것 필요-> predecessor(parent)
index D 에는 B 저장
A부터 D까지의 최단 경로는? D부터 역순으로 출력해주기 P[D]=B, P[B]=A, 스택 같은거에 삽입 ->A,B,D -> pop -> 최단경로 A,B,D
O(n+m) time 에 수행가능
임의의 digraph D에서 SCC 찾기
어디에 적용? 사람들 팔로우 관계성(sns)
2번의 dfs 이용
phase 1
(finish stack)phase 2
phase 2 DFS 하기전까지 수행한 것, 그다음
SCC 정보 저장할 array 생성
finish stack에서 pop 해서 나온 E를 reader로 설정
E부터 dfs 수행, 결과 array에 저장

reader A

reader C

위 과정을 완료하면 SCC 찾기 가능 (같은 리더 가진 경우 같은 SCC) SCC개수=리더의 수
phase 1: O(n+m) time
phase 2 : transpose graph 생성 -> O(n+m) time, 2nd DFS : O(n+m) time
total : O(n+m) time