1260. dfs 와 bfs

phoenixKim·2023년 11월 20일
0

백준 알고리즘

목록 보기
140/174
  • 소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#include <map>
#include <string>
#include <queue>

void dfs(int _vertex , vector<vector<int>> &_v, 
	vector<bool>& _check)
{
	if (_check[_vertex] == true)
		return;
	_check[_vertex] = true;
	cout << _vertex << " ";

	for (int i = 0; i < _v[_vertex].size(); ++i)
	{
		dfs(_v[_vertex][i], _v, _check);
	}
}

// 해당 정점에 인접한 정점들 모두 탐색 후 진행 
void bfs(int _vertex, vector<vector<int>> &_v,
	vector<bool>& _check)
{
	//if (_check[_vertex] == true)
	//	return;

	// 큐를 사용하자.
	queue<int> q;
	q.push(_vertex);

	while (!q.empty())
	{
		int target = q.front();
		q.pop();
		if (_check[target] == false)
		{
			_check[target] = true;
			cout << target << " ";
		}
		else
			continue;

		// 해당 타겟에 인접한 정점들부터 접근하자.
		for (int i = 0; i < _v[target].size(); ++i)
		{
			q.push(_v[target][i]);
		}

	}

}



int main()
{
	//sync_with_studio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, m, v;
	cin >> n >> m >> v;

	vector<vector<int>>vv(n + 1);
	vector<bool> check(n + 1, false);


	int a, b = 0;
	for (int i = 0; i < m; ++i)
	{
		cin >> a >> b;
		// 문제에서 양방향이라고 전제 조건 제시함.
		vv[a].push_back(b);
		vv[b].push_back(a);
	}

	for (int i = 1; i <= n; ++i)
	{
		sort(vv[i].begin(), vv[i].end());
	}

	// 1 : 2 3 4
	// 2 : 4
	// 3 : 4
	dfs(v, vv, check);

	cout << endl;
	// dfs 끝.
	for (int i = 0; i < n + 1; ++i)
	{
		check[i] = false;
	}

	// bfs 시작
	bfs(v, vv, check);

}

  • 주의할 점
    : 입출력 tie 해야 함.

  • 놓친 부분
    : vector 배열 정렬할 때 마지막 for문 등호 빼먹음..

profile
🔥🔥🔥

0개의 댓글

관련 채용 정보