250x250
    
    
  
                              Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        반응형
    
    
    
  | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
                            Tags
                            
                        
                          
                          - sql
 - Calendar
 - set
 - Properties
 - GC로그수집
 - 스프링부트
 - math
 - map
 - union_find
 - NIO
 - BFS
 - Union-find
 - 리소스모니터링
 - javascript
 - dfs
 - 큐
 - Java
 - scanner
 - spring boot
 - priority_queue
 - 스택
 - JPA
 - html
 - string
 - date
 - CSS
 - alter
 - deque
 - List
 - 힙덤프
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
매일 조금씩
백준 11724번 : 연결 요소의 개수 [C++] 본문
728x90
    
    
  반응형
    
    
    
  


BFS와 DFS 두가지를 모두 이용하여 풀수 있는 문제다.
1. DFS
#include <iostream>
#include <queue>
#include <cstring> //memset
#include <vector>
using namespace std;
const int MAX = 1000 + 1;
int N, M;
vector<int> connect[MAX];	// 이차가됨
bool visited[MAX];
void DFS(int node) {
	visited[node] = true;
	// node에 연결된 다른 정점을 모두 방문
	for (int i = 0; i < connect[node].size(); i++) {	
		int next = connect[node][i];
		if (!visited[next]) {
			DFS(next);
		}
	}
	
}
int main(void) {
	
	cin >> N >> M;
	int u, v;
	for (int i = 0; i < M; i++) {
		int u, v;
		cin >> u >> v;
		connect[u].push_back(v);
		connect[v].push_back(u);
	}
	int cnt = 0; 
	for (int i = 1; i <= N; i++) {
		if (!visited[i]) {
			DFS(i);
			cnt++;
		}
	}
	cout << cnt << endl;
	return 0;
}
2. BFS
#include <iostream>
#include <queue>
#include <cstring> //memset
#include <vector>
using namespace std;
const int MAX = 1000 + 1;
int N, M;
queue<int> q;
vector<int> connect[MAX];
bool visited[MAX];
void BFS(int node) {
	visited[node] = true;
	while(!q.empty()) {
		int cur = q.front();
		q.pop();
		// cur와 연결된 모든 노드를 방문
		for(int i = 0; i < connect[cur].size(); i++) {
			int next = connect[cur][i];
			if (!visited[next]) {
				q.push(next);
				visited[next] = true;
			}
		}
	}
	
}
int main(void) {
	
	cin >> N >> M;
	int u, v;
	for (int i = 0; i < M; i++) {
		int u, v;
		cin >> u >> v;
		connect[u].push_back(v);
		connect[v].push_back(u);
	}
	int cnt = 0; 
	for (int i = 1; i <= N; i++) {
		if (!visited[i]) {
			q.push(i);
			BFS(i);
			cnt++;
		}
	}
	cout << cnt << endl;
	return 0;
}728x90
    
    
  반응형
    
    
    
  '알고리즘 > Graph (DFS, BFS)' 카테고리의 다른 글
| 백준 6603번 : 로또 [C++] (0) | 2020.08.09 | 
|---|---|
| 백준 14502번 : 연구소 [C++] (0) | 2020.08.08 | 
| 백준 1697번 : 숨바꼭질 [C++] (0) | 2020.08.08 | 
| 백준 1012번 : 유기농 배추 [C++] (0) | 2020.08.08 | 
| 백준 7576번 : 토마토 (0) | 2020.08.07 |