본문 바로가기

Algorithm/백준

[백준] 11724번: 연결 요소의 개수

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();
}

'Algorithm > 백준' 카테고리의 다른 글

[백준] 1261번: 알고스팟  (0) 2020.09.08
[백준] 1012번: 유기농 배추  (0) 2020.04.06
[백준] 1182번: 부분수열의 합  (0) 2020.03.28
[백준] 1874번: 스택 수열  (0) 2020.03.23
[백준] 5076번: Web Pages  (0) 2020.03.22