잘 쓴 코드는 주석과 설명이 필요 없다고 하지만 겸손하게 주석은 넣었다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <iostream> #include <vector> using namespace std; bool check[1001]; vector<vector<int>> lst(1001); void dfs(int start) { check[start] = true; for (int i = 0; i < lst[start].size(); ++i) { int v = lst[start][i]; if (check[v] == false) dfs(v); } return; } int main() { int vertex, edge; cin >> vertex >> edge; int input_1, input_2; //간선을 2차원 벡터에 저장 for (int i = 0; i < edge; ++i) { cin >> input_1 >> input_2; lst[input_1].push_back(input_2); } int link_num = 0; for (int i = 1; i <= vertex; ++i) { //방문되지 않았다면 하나의 연결요소임으로 개수를 늘려준다. if (check[i] == false) { //dfs로 방문할 수 있는 모든 정점을 방문한다. dfs(i); link_num++; } } //예상 복잡도 O(V(V+E)) cout << link_num << endl; return 0; } | cs |
'백준 온라인 저지' 카테고리의 다른 글
2667번 : 단지번호붙이기 (0) | 2018.07.16 |
---|---|
백준 1707: 이분 그래프 (0) | 2018.07.16 |
백준 1260: DFS와 BFS (0) | 2018.07.15 |
백준 1676: 팩토리얼 0의 개수 (0) | 2018.07.13 |
백준 6588: 골드바흐의 추측 (0) | 2018.07.13 |