[백준 실버2] 1260 : DFS와 BFS

수민이슈·2023년 9월 13일
0

[C++] 코딩테스트

목록 보기
60/116
post-thumbnail

🖊️ 문제

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


🖊️ 풀이

정석적인 DFS와 BFS 구현 문제.
큰 무리없이 풀었으나 기념으로 포스팅함

단,,

이렇게 컴파일에러가 떴는데 ㅠㅠ
memset을 사용하기 위해 memory.hstring.h를 include해주지 않아서 발생한 문제였다.

나머진 기본 구현이라 DFS, BFS 복습용으로 좋았당.

#include <iostream>
#include <queue>
#include <algorithm>
#include <string.h>
using namespace std;

bool visited[1001]{ false };

void DFS(vector<vector<int>>& v, int idx, int cnt)
{
	if (v.size() - 1 <= cnt) return;
	cout << idx << " ";
	visited[idx] = true;
	sort(v[idx].begin(), v[idx].end());
	for (int i = 0; i < v[idx].size(); i++) {
		if (visited[v[idx][i]]) continue;
		DFS(v, v[idx][i], ++cnt);
	}
}

void BFS(vector<vector<int>>& v, int start)
{
	queue<int> q;
	q.push(start);
	visited[start] = true;
	while (!q.empty()) {
		int idx = q.front();
		cout << idx << " ";
		q.pop();
		sort(v[idx].begin(), v[idx].end());
		for (auto& n : v[idx]) {
			if (visited[n]) continue;
			q.push(n);
			visited[n] = true;
		}
	}
	cout << '\n';
}

int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);

	int N, M, V;
	cin >> N >> M >> V;

	vector<vector<int>> vertex;
	for (int i = 0; i < N + 2; i++) {
		vertex.emplace_back(vector<int>());
	}
	
	for (int i = 0; i < M; i++) {
		int x, y;
		cin >> x >> y;
		vertex[x].push_back(y);
		vertex[y].push_back(x);
	}

	DFS(vertex, V, 1);
	cout << '\n';

	memset(visited, false, sizeof(visited));

	BFS(vertex, V);
}

0개의 댓글