Study/Baekjoon

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

에린_1 2024. 2. 29. 00:47
728x90

1260 DFS와 BFS

#include <bits/stdc++.h>
using namespace std;

vector<int> adj[10002];
vector<int> result_bfs;
vector<int> result_dfs;
bool visited[1002];

void dfs(int x)
{
	visited[x] = true;
	result_dfs.push_back(x);
	for (int i = 0; i < adj[x].size(); ++i)
	{
		if (!visited[adj[x][i]])
			dfs(adj[x][i]);
	}
}

void bfs(int x)
{
	queue<int> q;
	q.push(x);
	visited[x] = true;
	while (!q.empty())
	{
		int tmp = q.front();
		q.pop();
		result_bfs.push_back(tmp);
		for (int i = 0; i < adj[tmp].size(); ++i)
		{
			if (!visited[adj[tmp][i]])
			{
				q.push(adj[tmp][i]);
				visited[adj[tmp][i]] = true;
			}
		}
	}
}

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int node, edge, start;
	cin >> node >> edge >> start;
	for (int i = 0; i < edge; ++i)
	{
		int a, b;
		cin >> a >> b;
		adj[a].push_back(b);
		adj[b].push_back(a);
	}
	for (int i = 1; i <= node; ++i)
	{
		sort(adj[i].begin(), adj[i].end());
	}
	bfs(start);
	memset(visited, false, sizeof(visited));
	dfs(start);
	for (auto i : result_dfs)
		cout << i << " ";
	cout << "\\n";
	for (auto i : result_bfs)
		cout << i << " ";
	
	return 0;
}

  • DFS , BFS를 구현하는 문제.
  • 전에 파이썬으로 풀었음에도 시간이 지나서 많이 애먹었다.
  • 코드를 외운다기 보다는 개념을 숙지하고 그 개념을 토대로 코드를 짠다면 조금 더 편하게 다가갈 수 있지 않을까 생각한다.
728x90