알고리즘/탐색

그래프의 순회 - BFS, DFS

Aif 2023. 9. 11. 18:23

그래프의 순회는 그래프의 모든 정점을 방문하여 데이터를 확인하는 알고리즘이다.

 

BFS - 넓이 우선 탐색

DFS - 깊이 우선 탐색

 

두 가지가 있으며 다양한 알고리즘에 활용되는 기본 연산 느낌이다.

 

막상 처음 접하면 어렵지만 배우고 나면 쉬운 개념의 알고리즘이다.

 

처음엔 그래프 구조와 큐를 사용한다는 점을 떠올리지 못해서 어려웠던 것 같다.

 

BFS

그래프 정점에 방문했을 때, 간선이 방문하지 않은 정점을 가르키면 큐에 넣는다.

큐에 넣을 때, 방문을 한 것으로 간주하고 큐에 넣는다.

방문한 정점은 방문했다고 표시 >> 안해도 될듯

큐에서 정점 하나를 꺼내서 위의 과정을 반복 

큐가 비면 종료

void Graph::BFS(VORTEX* visit) {
	EDGE* temp = visit->Ehead;
	VORTEX* next = nullptr;

	visit->visited = true;
	std::cout << visit->Data << " ";

	while (temp) {
		if (!temp->to->visited) {
			q.push(temp->to);
			temp->to->visited = true;
		}
		temp = temp->next;
	}
	if (!q.empty()) {
		next = q.front();
		q.pop();

		BFS(next);
	}
}

 

DFS 

그래프 정점에 방문하고 방문으로 표시함

그래프의 간선을 통해 다음 정점으로 이동 >> 반복

void Graph::DFS(VORTEX* visit) {
	EDGE* temp = visit->Ehead;
	VORTEX* next = nullptr;

	visit->visited = true;
	std::cout << visit->Data << " ";

	while (temp) {
		if (!temp->to->visited) {
			next = temp->to;

			DFS(next);
		}
		temp = temp->next;
	}
}

'알고리즘 > 탐색' 카테고리의 다른 글

문자열 탐색 - 카프 라빈  (0) 2023.10.23
문자열 탐색 - 무식한 탐색  (0) 2023.10.23
레드 블랙 트리의 삭제  (0) 2023.09.06
레드 블랙 트리의 삽입  (0) 2023.09.06
레드 블랙 트리 - 회전  (0) 2023.09.06