์ฝ”๋”ฉํ…Œ์ŠคํŠธ/BOJ

[๋ฐฑ์ค€1260]DFS์™€ BFS(C++)

kite707 2021. 7. 3.

https://www.acmicpc.net/problem/1260

 

1260๋ฒˆ: DFS์™€ BFS

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ

www.acmicpc.net

dfs/bfs๊ตฌํ˜„

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

vector<int> edge[1001];
int check1[1001];
int check2[1001];
void dfs(int start) {
	check1[start] = 1;
	cout << start << " ";
	for (int i = 0; i < edge[start].size(); i++) {
		if (check1[edge[start][i]] == 0) {
			dfs(edge[start][i]);
		}
	}
}
void bfs(int start) {
	queue<int> q;
	q.push(start);
	check2[start] = 1;
	while (!q.empty()) {
		int cur = q.front();
		q.pop();
		cout << cur << " ";
		

		for (int i = 0; i < edge[cur].size(); i++) {
			if (check2[edge[cur][i]] == 0) {
				q.push(edge[cur][i]);
				check2[edge[cur][i]] = 1;
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int N, M, S;
	cin >> N >> M >> S;
	while (M != 0) {
		int a, b;
		cin >> a >> b;
		edge[a].push_back(b);
		edge[b].push_back(a);

		M--;
	}
	//์ •์  ๋ฒˆํ˜ธ ์ž‘์€๊ฒƒ ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•˜๋ฏ€๋กœ ์ •๋ ฌ
	for (int i = 0; i < 1001; i++) {
		sort(edge[i].begin(), edge[i].end());
	}
	dfs(S);
	cout << "\n";
	bfs(S);

}

 

๋Œ“๊ธ€