Cod sursa(job #1177496)

Utilizator razvan_milicinMilicin Razvan razvan_milicin Data 26 aprilie 2014 12:43:24
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <vector>
#include <cstdio>
#include <queue>

using namespace std;

#define maxn 100005

vector<int> muchii[maxn];

queue<int>coada;

int i,n,m,a,cost[maxn],vizitat[maxn],k,ok;

void bfs(int nodinc)
{
    coada.push(nodinc);
    vizitat[nodinc]=1;
    cost[nodinc]=k;
    k++;
    while(!coada.empty())
    {
        nodinc=coada.front();
        coada.pop();
        for (vector<int>::iterator i=muchii[nodinc].begin();i!=muchii[nodinc].end();i++)
        if(vizitat[*i]!=1)
        {
            vizitat[*i]=1;
            cost[*i]=k;
            coada.push(*i);
            ok=1;
        }
        if (ok==1)
            k++;
        ok=0;
    }
}

int main ()
{
    freopen ("bfs.in","r",stdin);
    freopen ("bfs.out","w",stdout);
    int n1,n2;
    scanf("%d%d%d",&n,&m,&a);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&n1,&n2);
        muchii[n1].push_back(n2);
    }

    bfs (a);

    for(i=1;i<=n;i++)
        if(vizitat[i]!=1)
            cost[i]=-1;

    for(i=1;i<=n;i++)
        printf("%d ",cost[i]);
    return 0;
}