(1) 깊이 우선 탐색(Depth First Search)
(2) 너비 우선 탐색(Breadth First Search)
// g: 그래프, n: 정점 수, v: 출발정점
// parent는 배열로서 parent[u]는 bfs 트리에서 u의 부모노드를 가리킴
Algorithm bfs(g, n, v, parent)
// visited는 각 정점이 방문 되었는지를 체크하기 위한 크기 n인 배열
for w = 0 to n-1
visited[w] = false
dist[0] = 0 // dist = 거리 저장하는 배열
parent[v] = -1 // 시작 정점의 parent는 없기 때문
visitied[v] = true // v를 방문
// Queue : 큐
Q.enqueue(v) // 큐에 v를 삽입
while(!Q.isEmpty) // 큐가 비어있지 않다면,
u = Q.dequeue() // 큐에서 삭제
// u와 인접한 각 정점 w에 대하여,
if (!visited[w])
visited[w] = true
Q.Enqueue(w)
parent[w] = u // bfs 트리 에지
dist[w] = dist[u] + 1 // 거리 계산