Cod sursa(job #1039656)

Utilizator SapientiaCHIRILA ADRIAN Sapientia Data 23 noiembrie 2013 12:57:49
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <deque>
#define Nmax 20000
using namespace std;
deque <int> d;
int a[Nmax][Nmax],cost[Nmax];
bool viz[Nmax];
int n,i,j,s;
void reading(int &n,int &s)
{
    int m;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d",&n,&m,&s);
    for(i=1;i<=m;++i)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        ++a[x][0];a[x][a[x][0]]=y;
    }
}
void bfs()
{
    int x=s;
    cost[x]=0;
    viz[x]=1;
    d.push_front(x);
    while(!d.empty())
    {
        x=d.front();
        d.pop_front();
        for(i=1;i<=a[x][0];++i)
         if (!viz[a[x][i]])
         {
             d.push_back(a[x][i]);
             viz[a[x][i]]=1;
             cost[a[x][i]]=cost[x]+1;
         }
    }
}
int main()
{
    reading(n,s);
    bfs();
    for(i=1;i<=n;++i)
     if (!viz[i]) printf("%d ",-1);
      else printf("%d ",cost[i]);
    return 0;
}