작심 24/7

[백준] 1260번 DFS와 BFS 본문

백준

[백준] 1260번 DFS와 BFS

모닝수박 2020. 6. 15. 23:12
 

1260번: DFS와 BFS

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

www.acmicpc.net

기본적인 DFS와 BFS이다.

DFS는 재귀로 구현하였고

BFS는 큐로 구현하였다.

 

방문할 수 있는 정점이 여러 개인 경우엔 번호가 더 작은 것부터 방문해야 하므로

벡터의 각 행마다 오름차순으로 정렬시켜주었다.

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> v[1001];
queue <int> q;
int visited[1001] = { 0 }, idx;

void Dfs(int V) {
	if (visited[V]) return;
	cout << V << " ";
	visited[V] = 1;
	for (int i = 0; i < v[V].size(); i++) Dfs(v[V][i]);
}

void Bfs(int V) {
	visited[V] = -1;
	q.push(V);
	while (!q.empty()) {
		idx = q.front();
		for (int i = 0; i < v[idx].size(); i++) {
			if (visited[v[idx][i]] != -1) {
				q.push(v[idx][i]);
				visited[v[idx][i]] = -1;
			}
		}
		cout << q.front() << " ";
		q.pop();
	}
}

int main() {
	int N, M, V, x, y;
	cin >> N >> M >> V;
	for (int i = 0; i < M; i++) {
		cin >> x >> y;
		v[x].push_back(y);
		v[y].push_back(x);
	}

	for (int i = 0; i < N; i++) sort(v[i].begin(), v[i].end());

	Dfs(V);
	cout << "\n";
	Bfs(V);

	return 0;
}

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

[백준] 5427번 불 (C++, JAVA)  (0) 2020.06.16
[백준] 6593번 상범 빌딩  (0) 2020.06.16
[백준] 7562번 나이트의 이동  (0) 2020.06.15
[백준] 2178번 미로 탐색  (0) 2020.06.15
[백준] 2644번 촌수계산  (0) 2020.06.15
Comments