DFS와 BFS
https://www.acmicpc.net/problem/1260
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 2 초 | 128 MB | 208632 | 77192 | 45837 | 35.992% |
문제
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오.
단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다.
정점 번호는 1번부터 N번까지이다.
입력
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다.
다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다.
입력으로 주어지는 간선은 양방향이다.
출력
첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다.
V부터 방문된 점을 순서대로 출력하면 된다.
예제 입력 1
4 5 1 1 2 1 3 1 4 2 4 3 4
예제 출력 1
1 2 4 3 1 2 3 4
예제 입력 2
5 5 3 5 4 5 2 1 2 3 4 3 1
예제 출력 2
3 1 2 5 4 3 1 4 2 5
예제 입력 3
1000 1 1000 999 1000
예제 출력 3
1000 999 1000 999
출처
- 문제를 만든 사람: author5
- 데이터를 추가한 사람: dfghcvb11, djm03178, doju
- 어색한 표현을 찾은 사람: doju
- 빠진 조건을 찾은 사람: pumpyboom
알고리즘 분류
DFS와 BFS의 기본적인 개념을 묻는 문제
통과된 코드
#include<iostream>
#include<queue>
using namespace std;
#define MAX 1001
int N, M, V; // 정점의 개수, 간선의 개수, 시작 정점
int map[MAX][MAX]; // 인접 행렬의 그래프
bool visited[MAX]; // 정점의 방문 여부
queue<int> q;
void Reset()
{
for (int i = 0; i <= N; i++)
{
visited[i] = 0; // 방문 초기화
}
}
void DFS(int v)
{
// 해당 정점 방문으로 변경
visited[v] = true;
cout << v << " ";
for (int i = 1; i <= N; i++)
{
// 현재 정점과 연결되어있고 방문 되지 않았으면 실행
if (map[v][i] == 1 && visited[i] == 0)
{
DFS(i); // 재귀
}
}
}
void BFS(int v)
{
q.push(v); // 해당 점점 queue에 푸시
visited[v] = true; // 해당 정점 방문으로 변경
cout << v << " ";
while(!q.empty()) // queue가 비어있지 않으면 실행
{
v = q.front(); // queue 제일 앞에 있는 원소를 반환
q.pop(); // queue 제일 앞에 있는 원소를 반환
for (int j = 1; j <= N; j++)
{
// 현재의 정점과 연결되어 있고 방문 되지 않았으면 실행
if (map[v][j] == 1 && visited[j] == 0)
{
q.push(j);
visited[j] = true;
cout << j << " ";
}
}
}
}
int main()
{
cin >> N >> M >> V;
for (int i = 0; i < M; i++)
{
int a, b;
cin >> a >> b;
map[a][b] = 1;
map[b][a] = 1;
}
Reset();
DFS(V);
cout << '\n';
Reset();
BFS(V);
return 0;
}
알고리즘 관련 개념이 없어서 시간을 많이 소요했다.


![백준 11279번 (최대 힙, C++, Priority_Queue) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/2022/10/boj-og-1-2048x1070-1-1024x535.png)
![백준 3190번 (뱀, C++, Queue, Simulation ) / 추가 반례 [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og.png)
