Cod sursa(job #1337158)

Utilizator afkidStancioiu Nicu Razvan afkid Data 8 februarie 2015 17:46:31
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
#include <iostream>
#include <list>
#include <map>
#include <vector>
#include <utility>
#include <deque>
#define NMAX 100000

using namespace std;

vector<int> arcs[NMAX];
int distances[NMAX]{0};
int n,s,m;

int readInt()
{
    int n=0;
    char c=getchar();
    while(c<'0'||c>'9') c=getchar();
    while(c>='0'&&c<='9')
    {
        n=(n<<1)+(n<<3)+c-'0';
        c=getchar();
    }
    return n;
}

void Bfs(int s,int n)
{
    deque<int> fifo;
    vector<int>::iterator it;
    fifo.push_back(s);
    distances[s]=1;
    while(!fifo.empty())
    {
        int p=fifo.front();
        it=arcs[p].begin();
        while(it!=arcs[p].end())
        {
            if(!distances[*it])
            {
                fifo.push_back(*it);
                distances[*it]=distances[p]+1;
            }
            it++;
        }
        fifo.pop_front();
    }
}

void ReadFile()
{
    freopen("bfs.in","r",stdin);
    int a,b;
    n=readInt();
    m=readInt();
    s=readInt();
    for(int i=1; i<=m; ++i)
    {
        a=readInt();
        b=readInt();
        arcs[a].push_back(b);
    }
}
void Write()
{
     freopen("bfs.out","w",stdout);
     for(int i=1; i<=n; ++i)
    {
        printf("%d ",distances[i] -1);
    }
    printf("\n");
}

int main()
{
    ReadFile();
    Bfs(s,n);
    Write();
    return 0;
}