#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
#define MAX 100'005
#define FRONT q.front()
vector<int> nodes[MAX];
bool isVisit[MAX];
int result[MAX];
queue<int> q;
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
int N, M, R; cin >> N >> M >> R;
int temp1, temp2;
for (int i = 0; i < M; ++i)
{
cin >> temp1 >> temp2;
nodes[temp1].push_back(temp2);
nodes[temp2].push_back(temp1);
}
//내림차순 정렬하기
for (int i = 1; i <= N; ++i)
{
sort(nodes[i].begin(), nodes[i].end(),greater<>());
}
q.push(R);
memset(isVisit, 0, sizeof(bool) * MAX);
isVisit[R] = true;
memset(result, 0, sizeof(int) * MAX);
result[R] = 1;
int cnt = 1;
while (q.empty() == false)
{
for (const auto & data : nodes[FRONT])
{
if (isVisit[data] == false)
{
q.push(data);
isVisit[data] = true;
result[data] = ++cnt;
}
}
q.pop();
}
for (int i = 1; i <= N; ++i)
{
cout << result[i] << "\n";
}
return 0;
}
||사고 과정
단순 BFS를 구현하는것이기에 특별한 사고는 없었다.
||사용 기법
- BFS
||풀면서 느낀 것
- 노드를 1부터 시작하면 주의할것
이번에 이것때문에 30분정도 시간을 소모했는데 BFS는 노드의 인덱스가 1부터 N까지 탐색하지만
입력 받을 때 0부터 N-1 까지 탐색하고 있었다 =~=
이건 종종 있는 일이라 주의할 겸 포스팅을 했다.
||나아 진것
- 좀 더 수월한 BFS
역시 계속 다루다 보니까 계속 더 빠르게 구현이 되는듯하다.
'코딩 테스트 > 알고리즘 풀이' 카테고리의 다른 글
[백준 - 2562] 문자열 반복 (0) | 2022.08.10 |
---|---|
[코드포스 - 1716A] 2-3 Moves (0) | 2022.08.06 |
[백준 - 106953] A → B (0) | 2022.08.03 |
[백준 - 2565] 전깃줄 (0) | 2022.08.03 |
[백준 - 1260] DFS와 BFS (0) | 2022.08.02 |