Cod sursa(job #1234563)

Utilizator j.loves_rockJessica Joanne Patrascu j.loves_rock Data 27 septembrie 2014 15:50:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");

struct lista{
    int i;
    lista *urm;
};

struct lista *v[100005];
int coada[200005],cap=1,spate=0,n,m,s;
int sol[100005],viz[100005];

void adauga(int x,int y)
{

    lista *nou;
    nou = new lista;
    nou->i = y;
    nou->urm = v[x];
    v[x] = nou;
}

void citire()
{

    in>>n>>m>>s;
    int x,y;
    for(int j = 1 ; j <= m ; j++)
    {

        in>>x>>y;
        adauga(x,y);
    }
    in.close();
}

void adauga_in_coada(int x)
{

    coada[++spate] = x;
}

void parcurge(int start)
{

    adauga_in_coada(start);
    viz[start] = 1;
    sol[start] = 0;
    int k;
    lista *it;
    while(cap<=spate)
    {

        k = coada[cap];
        viz[k] = 1;
        for( it = v[k] ; it ; it = it->urm)
            if(sol[it->i] == -1){
                sol[it->i] = sol[k] + 1;
                adauga_in_coada(it->i);
            }
        ++cap;
    }
}

void init()
{

    for(int i = 1 ; i <= n ; i++){
        sol[i] = -1;
        viz[i] = 0;
    }
}

int main()
{

    citire();
    init();
    parcurge(s);
    for(int i = 1 ; i <= n ; i++)
        out<<sol[i]<<" ";
    out.close();
    return 0;
}