알고리즘

[알고리즘 C++] 백준 14496 - 그대, 그머가 되어

gmwoo 2021. 12. 17. 11:34
#include <iostream>
#include <queue>
using namespace std;

int n, m, a, b;
bool adj[1001][1001];
int visited[1001];

int main() {
    cin >> a >> b; // hope to change a to b
    cin >> n >> m; // input N, M
    for (int i = 0; i < m; i++) {
        int x, y; cin >> x >> y;
        adj[x][y] = true; // input edge x, y (1 <= N <= 1000)
        adj[y][x] = true; //x와 y가 바뀌어도 괜찮다

    }
    queue<int> q;
    q.push(a); //input raw 'a' in Queue
   int count = 1; // count  
 
    while (!q.empty()) { // 아무것도 없다면 그만
        int qsize = q.size();
        for (int j = 0; j < qsize; j++) {
            int here = q.front(); q.pop(); // 'here' 현재 정점 위치 & pop 
            if (visited[here]) continue; // 방문한 곳 무시
            visited[here] = count; // 최단 경로 업데이트

            for (int i = 1; i <= n; i++) 
                if (adj[here][i]) q.push(i); // 인접한 정점들을 검사하면서 경로 갱신
        }
        count++;
    }
    if (visited[b] == 0) cout << -1 << endl;
    else cout << visited[b] - 1 << endl; // 최종 목적지 정점에 대한 count 출력
}
반응형