Cod sursa(job #1717714)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 15 iunie 2016 16:44:52
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <vector>
#include <bitset>
#include <queue>

using namespace std;

int n, m, s;
int viz[100100];
vector<int> vecini[100100];

void citire()
{
    scanf("%d %d %d", &n, &m, &s);
    s--;

    int tmp1, tmp2;

    for(int i = 0; i < m; i++)
    {
        scanf("%d %d", &tmp1, &tmp2);
        tmp1--;
        tmp2--;

        vecini[tmp1].push_back(tmp2);
    }
}

void bfs()
{
    queue<int> Q;
    Q.push(s);

    while(!Q.empty())
    {
        for(vector<int>::iterator it = vecini[Q.front()].begin(); it < vecini[Q.front()].end(); it++)
        {
            if((viz[*it] == 0 || viz[*it] > viz[Q.front()]) && *it != s)
            {
                viz[*it] = viz[Q.front()] + 1;
                Q.push(*it);
            }
        }

        Q.pop();
    }
}

void afisare()
{
    for(int i = 0; i < n; i++)
    {
        if(viz[i] == 0 && i != s)
        {
            printf("-1 ");
            continue;
        }

        printf("%d ", viz[i]);
    }
}

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

    citire();
    bfs();
    afisare();

    return 0;
}