Cod sursa(job #1651891)

Utilizator robert.iacobIacob Robert robert.iacob Data 14 martie 2016 09:16:07
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define DimMax 100100

using namespace std;

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

int n,m,start;
int cost[DimMax];
vector <vector<int> > L;
queue <int > Q;

void Citire()
{
    int i,x,y;
    fin >> n >> m >> start;

    start--;
    L.resize(n);

    for(i = 0; i < m; i++)
    {
        fin >> x >> y;
        x--;
        y--;
        L[x].push_back(y);
    }
}

void BFS(int k)
{
    int i,pr,ul,x;

    ///inserez nodul de start avand costul initial 0, deoarece de la el plec
    Q.push(k);
    cost[k] = 0;

    while(!Q.empty())
    {
        /// extrag din coada
        x=Q.front();
        Q.pop();

        ///parcurg toti adiacentii nodului extras, iar pe cei nevizitati ii adaug in coada si le calculez costul
        for(i=0;i<L[x].size();i++)
            if(cost[L[x][i]]==-1)
            {
                Q.push(L[x][i]);
                cost[L[x][i]]=cost[x]+1;  ///unde i este nodul actual, iar x este nodul de la care am ajuns la el, gen x e tatal, i e fiul
            }
    }
}

void Afisare()
{
    int i;
    for(i=0;i<n;i++)
        fout<<cost[i]<<" ";
    fout<<"\n";
}

void Init_vects()
{
    int i;
    for(i=0;i<DimMax;i++)
        cost[i]=-1;
}

int main()
{
    Citire();
    Init_vects();
    BFS(start);
    Afisare();
    return 0;
}