문제링크 : https://www.acmicpc.net/problem/24446
24446번: 알고리즘 수업 - 너비 우선 탐색 3
너비 우선 탐색 트리는 1, 2, 3, 4번 노드로 구성된다. 1번 노드가 루트이다. 1번 노드의 자식은 2, 4번 노드이다. 3번 노드는 2번 또는 4번 노드의 자식이다. 5번 노드는 1번 노드에서 방문 될 수 없다.
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int N, M, R;
vector<int>v[100001];
int visited[100001];
void bfs()
{
memset(visited, -1, sizeof(visited));
queue<int>q;
q.push(R);
visited[R]=0; //시작점
while(!q.empty())
{
int cur = q.front();
q.pop();
for(int i=0; i<v[cur].size(); i++)
{
int next = v[cur][i];
if(visited[next]!=-1) continue; //방문불가한 경우 스킵
visited[next] = visited[cur]+1; //깊이 증가
q.push(next);
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M >> R;
for(int i=1; i<=M; i++)
{
int x, y;
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
bfs();
for(int i=1; i<=N; i++) cout << visited[i] << "\n";
return 0;
}
간단한 bfs 문제에 깊이를 저장하는 것을 추가한 문제이다.
시작점은 깊이가 0이기에 0으로 시작하고 다음값에 대해 방문이 불가능한 -1이 아니라면 현재 깊이에 +1를 하여 저장해준다.
이를 모든 값에 대해 반복해주고 깊이를 담은 배열을 따로 출력해준다.
방문이 불가하다는 -1을 표시하기 위해 깊이를 담을 배열을 -1로 초기화 해주고 시작한다.
'백준 > 실버' 카테고리의 다른 글
[백준 14675번] 단절점과 단절선 (C++) (0) | 2023.12.20 |
---|---|
[백준 24481번] 알고리즘 수업 - 깊이 우선 탐색 3 (C++) (2) | 2023.12.17 |
[백준 25418번] 정수 a를 k로 만들기 (C++) (0) | 2023.12.12 |
[백준 1326번] 폴짝폴짝 (C++) (0) | 2023.12.11 |
[백준 14248번] 점프 점프 (C++) (0) | 2023.12.10 |