[๋ฐฑ์ค€] DFS์™€ BFS

[๋ฐฑ์ค€] DFS์™€ BFS


๋ฌธ์ œ


๋งํฌ : BOJ

๊ทธ๋ž˜ํ”„๋ฅผ DFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ์™€ BFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ , ๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ข…๋ฃŒํ•œ๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€์ด๋‹ค.





ํ’€์ด


๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์— ํ’€๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ๋‹ค ์žŠ์–ด๋ฒ„๋ ค์„œ,, ๋‹ค์‹œ ๋„์ ์—ฌ ๋ดค๋‹ค.

  1. DFS : Depth-first Search ๋กœ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์„ ๋งํ•œ๋‹ค.
    ํ•œ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋˜๋ฉด ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•œ๋‹ค.

  2. BFS : Breadth-first Search ๋กœ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ๋งํ•œ๋‹ค.
    ํ•œ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋˜๋ฉด ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํƒ์ƒ‰ํ•œ๋‹ค.

  3. DFS๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์ฐพ์•„๊ฐ€๋Š” ์žฌ๊ท€ ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
    BFS๋Š” ํ•จ์ˆ˜์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ queue์— ์ €์žฅํ•˜๊ณ  ์ฐพ์•„๊ฐ„๋‹ค.

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

//DFS์™€ BFS
int visited[1001] = { false };
vector<vector<int>> v(1001);
queue<int> q;
int n, m, start;
void dfs(int s) {

	visited[s] = true;
	cout << s << " ";
	for (int i = 0; i < v[s].size(); i++)
	{
		if (visited[v[s].at(i)] == true)
			continue;
		int next = v[s].at(i);
		dfs(next);
	}
}

void bfs() {
	q.push(start);
	visited[start] = true;
	while (!q.empty())
	{
		start = q.front();
		q.pop();
		cout << start << " ";
		for (int i = 0; i < v[start].size(); i++)
		{
			if (visited[v[start].at(i)])
				continue;
			q.push(v[start].at(i));
			visited[v[start].at(i)] = true;
		}
	}
}
int main() {

	ios::sync_with_stdio(false);
	cin.tie();


	cin >> n >> m >> start;
	int s = start;
	for (int i = 0; i < m; i++)
	{
		int x, y;
		cin >> x >> y;
		for (int j = 0; j < n; j++)
		{
			if (j == x - 1)
			{
				v[x].push_back(y);
				v[y].push_back(x);
				break;
			}
		}
	}
	for (int i = 0; i < n; i++)
		sort(v[i].begin(), v[i].end());

	dfs(s);

	for (int i = 0; i <= n; i++)
		visited[i] = false;
	cout << endl;
	bfs();

	return 0;
}

์‹ค์ˆ˜ํ–ˆ๋˜ ์ 


bfs์—์„œ return์— ํ•จ์ˆ˜๋ฅผ ๋ถ™์—ฌ์„œ.. ์ž๊พธ fail์ด ๋‚ฌ๋‹ค. ์Œ.. return์„ ํ•ด์„œ ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ ๋๋‚˜๋Š” ๋“ฏ ์‹ถ๋‹ค. ๋‹ค๋ฅธ ์˜ˆ์—์„œ ! ์•„๋ฌดํŠผ ๋ณต์Šต ๋‹ค์‹œ ์‹œ์ž‘!


ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: