#include <iostream>
#include <algorithm>
#include <queue>
#include <tuple>
 
int graph[101][101] = {};
bool visit[101] = {};
 
int main()
{
    int n = 0;
    int iStart = 0;
    int iDist = 0;
    int m = 0;
 
    std::cin >> n;
    std::cin >> iStart >> iDist;
    std::cin >> m;
 
    for (int i = 0; i < m; ++i)
    {
        int iFirstNumber = 0;
        int iSecondNumber = 0;
 
        std::cin >> iFirstNumber >> iSecondNumber;
 
        graph[iFirstNumber][iSecondNumber] = 1;
        graph[iSecondNumber][iFirstNumber] = 1;
    }
 
    std::queue<std::pair<int, int>> que = {};
 
    que.push({ 0, iStart });
 
    while (!que.empty())
    {
        std::pair<int, int> pairInt = que.front();
        int iCount = pairInt.first;
        int iNow = pairInt.second;
        que.pop();
 
        if (iNow == iDist)
        {
            std::cout << iCount;
            return 0;
        }
 
        if (!visit[iNow])
            visit[iNow] = true;
 
        else
            continue;
 
        for (int i = 1; i <= n; ++i)
        {
            if (graph[iNow][i] && !visit[i])
                que.push({iCount + 1, i});
        }
 
    }
 
    std::cout << -1;
 
    return 0;
}
 

BFS로 풀었다. (최단시간)

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 1697 숨바꼭질  (0) 2022.05.12
[C++] 백준 7569번 토마토  (0) 2022.05.12
[C++] 백준 2667 단지번호붙이기  (0) 2022.05.11
[C++] 백준 2606번 바이러스  (0) 2022.05.09
[C++] 백준 2178 미로 탐색  (0) 2022.05.07

+ Recent posts