Algorithm/BOJ
[BOJ 18232] 텔레포트 정거장 C++
surimi🍥
2023. 3. 10. 01:35
반응형
난이도: Silver 2
번호: 18232
생성일: March 10, 2023 1:33 AM
알고리즘 분류: 그래프 이론, 그래프 탐색, 너비 우선 탐색
언어: C++
C++
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
int N, M, S, E;
vector<vector<int>> map;
vector<bool> visit;
int BFS()
{
queue<int> Q;
Q.push(S);
visit[S] = true;
int depth = 0;
while (!Q.empty())
{
int size = Q.size() + 1;
while (--size)
{
int cur = Q.front();
Q.pop();
if (cur == E)
return depth;
for (int i : map[cur])
{
if (visit[i])
continue;
Q.push(i);
visit[i] = true;
}
if (cur > 1 && !visit[cur - 1])
{
Q.push(cur - 1);
visit[cur - 1] = true;
}
if (cur + 1 <= N && !visit[cur + 1])
{
Q.push(cur + 1);
visit[cur + 1] = true;
}
}
++depth;
}
return depth;
}
int main(void)
{
scanf("%d %d %d %d", &N, &M, &S, &E);
map.resize(N + 1);
visit.resize(N + 1);
for (int i = 0; i < M; i++)
{
int a, b;
scanf("%d %d", &a, &b);
map[a].push_back(b);
map[b].push_back(a);
}
printf("%d", BFS());
return (0);
}
반응형