Algorithm/백준
[백준] 11724번: 연결 요소의 개수
연어롤
2020. 4. 8. 21:51
https://www.acmicpc.net/problem/11724
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
www.acmicpc.net
연결 리스트 연습하려고 푼 문제인데 매트릭스로 만들어도 무방할듯!
#include <iostream>
#include <vector>
using namespace std;
class Graph {
public:
int N;
vector<vector<int>> adj;
vector<bool> visited;
Graph(int n) : N(n) {
adj.resize(N);
visited.resize(N);
}
void addEdge(int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
int dfs() {
int components = 0;
fill(visited.begin(), visited.end(), false);
for (int i = 0; i < N; i++) {
if (!visited[i]) {
dfs(i);
components++;
}
}
return components;
}
private:
void dfs(int curr) {
visited[curr] = true;
for (int next : adj[curr])
if (!visited[next]) dfs(next);
}
};
int main() {
int n, m;
cin >> n >> m;
Graph graph(n);
while (m--) {
int u, v;
cin >> u >> v;
u--;
v--;
graph.addEdge(u, v);
}
cout << graph.dfs();
}