Cod sursa(job #1387168)

Utilizator HDT_TibiHudema Dumitru Tiberiu HDT_Tibi Data 13 martie 2015 19:47:02
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

struct Nod{int inf;Nod*leg;}*L[100001];
typedef Nod* nod;

queue<int> q;
bool viz[100001];
int lungime[100001];
int n,m,s;

void add(int x, int y)
{
    nod p=new Nod;
    p->leg=L[x];
    p->inf=y;
    L[x]=p;
}

void citire()
{
    int x,y;
    fin>>n>>m>>s;
    for(int i=1; i<=m; i++)
    {
        fin>>x>>y;
        add(x,y);
    }
}


void bf(int x)
{
    viz[x]=1;
    q.push(x);
    while (!q.empty() )
    {
        for(nod w=L[x];w;w=w->leg)
            if(!viz[w->inf]){
                viz[w->inf]=1;
                q.push(w->inf);
                lungime[w->inf]=lungime[x]+1;
            }
        q.pop();
    }
}

void afisare()
{
    for(int i=1; i<=n; i++)
        if(!lungime[i])fout<<"-1 ";
        else fout<<lungime[i]<<" ";
}

int main()
{
    citire();
    bf(s);
    afisare();
    return 0;
}