Cod sursa(job #1243024)

Utilizator andreiiiiPopa Andrei andreiiii Data 15 octombrie 2014 15:35:53
Problema Popandai Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <list>
#include <vector>
#include <queue>

using namespace std;

const int Nmax = 100005, Mmax = 200005, Inf = 0x3f3f3f3f;

vector<int> G[Nmax];
int Dist[Nmax];

int main()
{
    freopen("pcb.in", "r", stdin);
    freopen("pcb.out", "w", stdout);

    int N, M, X;
    scanf("%d%d%d", &N, &M, &X);

    for (int i = 1; i <= M; ++i) {
        int x, y;
        scanf("%d%d", &x, &y);

        G[x - 1].push_back(y);
        G[y].push_back(x - 1);
    }

    memset(Dist, Inf, sizeof Dist);
    Dist[0] = 0;

    queue<int> Q;
    Q.push(0);

    while (!Q.empty()) {
        int node = Q.front();
        Q.pop();

        for (int p: G[node]) {
            if (Dist[p] == Inf) {
                Dist[p] = Dist[node] + 1;
                Q.push(p);
            }
        }
    }

    printf("%d\n", Dist[X] == Inf ? -1: Dist[X]);
}