백준/DFS BFS

[백준 1260번 / C++] DFS와 BFS

배발자 2022. 1. 20.
반응형

dfs와 bfs의 원리를 터득하기 위해 올린다. 

그렇게 어렵지 않은 문제이니 평소에 dfs나 bfs가 애매한 감이 있다면 풀어보길 권한다. 

#include <iostream>
#include <queue>
using namespace std; 
int map[1001][1001]; 
int visited1[1001];
int visited2[1001]; 
int n, m, v;
queue<int> q; 
void bfs() {
	while (!q.empty()) {
		int v = q.front(); 
		cout << v << " "; 
		q.pop(); 
		for (int j = 1; j <= n; j++) {
			if (map[v][j] && visited1[j] == 0) {
				visited1[j] = 1;
				q.push(j); 
			}
		}
	}
}
void dfs(int v) {
	cout << v << " "; 
	for (int j = 1; j <= n; j++) {
		if (map[v][j]&&visited2[j]==0) {
			visited2[j] = 1; 
			dfs(j); 
		}
	}
}
int main() {	
	cin >> n >> m >> v; 
	for (int i = 0; i < m; i++) {
		int a, b; cin >> a >> b; 
		map[a][b]=1; 
		map[b][a]=1; 
	}
	visited2[v] = 1; 
	dfs(v); 
	cout << endl; 
	visited1[v] = 1; 
	q.push(v); 
	bfs(); 

}

 

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

반응형

댓글