[c++] 그래프의 연결 여부 확인 알고리즘
그래프에서 모든 정점이 서로 연결되어 있는지를 확인하는 것은 매우 중요합니다. 이를 확인하는 알고리즘 중 하나는 깊이 우선 탐색(DFS)을 사용하는 것입니다.
깊이 우선 탐색(DFS)
깊이 우선 탐색은 한 정점으로부터 시작하여 그래프의 모든 정점을 방문하는 알고리즘입니다. 이를 통해 그래프의 연결 여부를 확인할 수 있습니다. 그래프의 모든 정점을 방문하는 과정에서, 한 번도 방문되지 않은 정점이 있으면 그래프는 연결되어 있지 않다고 판단할 수 있습니다.
아래는 C++에서의 간단한 깊이 우선 탐색 알고리즘 예시입니다.
#include <iostream>
#include <vector>
void dfs(int v, std::vector<bool>& visited, std::vector<std::vector<int>>& graph) {
visited[v] = true;
for (int u : graph[v]) {
if (!visited[u]) {
dfs(u, visited, graph);
}
}
}
bool isConnected(std::vector<std::vector<int>>& graph) {
int n = graph.size(); // 그래프의 정점 개수
std::vector<bool> visited(n, false); // 방문 여부를 저장하는 배열
dfs(0, visited, graph); // 첫 번째 정점부터 깊이 우선 탐색 시작
for (bool v : visited) {
if (!v) { // 방문되지 않은 정점이 있으면 그래프는 연결되어 있지 않다고 판단
return false;
}
}
return true; // 모든 정점을 방문했을 경우 그래프는 연결되어 있다고 판단
}
int main() {
std::vector<std::vector<int>> graph = {{1, 2}, {0, 2}, {0, 1}}; // 간단한 그래프 예시
bool connected = isConnected(graph);
std::cout << "The graph is " << (connected ? "connected" : "not connected") << std::endl;
return 0;
}
위의 코드는 인접 리스트 형태의 그래프를 입력으로 받아 해당 그래프가 연결되어 있는지를 판단하는 것을 보여줍니다.
그래프의 연결 여부를 확인하는 것은 그래프 이론이나 알고리즘 관련 문제를 해결하는 데 매우 중요한데, 깊이 우선 탐색을 이용한 알고리즘은 이러한 문제를 해결하는 데 유용하게 활용됩니다.