Cod sursa(job #1592210)

Utilizator CnemusTudor Luca Ioan Cnemus Data 7 februarie 2016 11:41:13
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <list>
using namespace std;

ifstream in("in");
ofstream out("out");

queue <int> coda;
int n,m,s,seen[100000],d[100000];

struct graph{
    list <int> node;
} G[100000];

void construct (){
    in>>n>>m>>s;
    int a,b;
    while(m){
        m--;
        in>>a>>b;
        if(a==b) continue;
        G[a].node.push_back(b);
        cout<<a<<" -> "<<b<<'\n';
    }
}

void BFS(int v){
    int x;
    d[v]=0;
    coda.push(v);
    while(!coda.empty()){
        x=coda.front();
        seen[x]=1;
        //
        //out<<x<<' ';

        coda.pop();
        //
        while(!G[x].node.empty()){
            if(seen[G[x].node.front()]==0){
                    coda.push(G[x].node.front());
                    d[G[x].node.front()]=d[x]+1;
            }
            G[x].node.pop_front();
        }
    }
}

void dist(){
    //out<<'\n';
    for(int i=1;i<=n;i++)
        if(d[i]==0&&i!=s) d[i]=-1;
    for(int i=1;i<=n;i++)
        out<<d[i]<<' ';
}


int main()
{
    construct();
    BFS(s);
    dist();
    return 0;
}