← Back to List

14496번: 그대, 그머가 되어 ↗

Solutions

C++14
1004 B | 1004 chars
#include <iostream>
#include <vector>
#define INF 99999999
using namespace std;

int N,M,start,en,i,j;
vector<vector<int>> V(1100);
bool check[1100];
int minC[1100];

int main() {
    cin >> start >> en >> N >> M;
    for(int x=0; x<M; x++) {
        cin >> i >> j;
        V[i].push_back(j);
        V[j].push_back(i);
    }
    for(int x=1; x<=N; x++) {
        minC[x] = INF;
        check[x] = true;
    }
    minC[start] = 0;

    for(int y=1; y<=N; y++) {
        int current = -1;
        int M = INF;
        for(int x=1; x<=N; x++) {
            if(check[x] && M > minC[x]) {
                current = x;
                M = minC[x];
            }
        }
        if(current == -1) break;

        for(int v = 0; v<V[current].size(); v++) {
            if(minC[V[current][v]] > minC[current] + 1) {
                minC[V[current][v]] = minC[current] +1;
            }
        }
        check[current] = false;
    }
    if(minC[en] == INF) {
        cout<<-1;
    }
    else cout<<minC[en];
}