Cod sursa(job #1707487)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 25 mai 2016 11:27:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <vector>
#include <queue>

using std::vector;
using std::queue;

int cost[100001];
vector <int> g[100001];
vector <int> :: iterator it;
queue <int> Q;

void bellford(int S)
{
    int nod;
    cost[S] = 1;
    Q.push(S);
    while(!Q.empty())
    {
        nod = Q.front();
        Q.pop();
        for(it = g[nod].begin(); it != g[nod].end(); ++it)
        {
            if(cost[*it] > cost[nod] + 1 || cost[*it] == 0)
            {
                cost[*it] = cost[nod] + 1;
                Q.push(*it);
            }
        }
    }
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    int con = 0;
    int n,m,i,n1,n2,S;
    scanf("%d %d %d",&n,&m,&S);
    for(i = 1; i <= m; ++i)
    {
        scanf("%d %d",&n1,&n2);
        g[n1].push_back(n2);
    }
    bellford(S);
    for(i = 1; i <= n; ++i)
        if(i == S || cost[i] != 0)
            printf("%d ",cost[i] - 1);
        else
            printf("-1 ");
    printf("\n\n");
    return 0;
}