Cod sursa(job #1604379)

Utilizator alphaRobert alpha Data 18 februarie 2016 10:47:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
#define MAXL 100010
int n,m,nr,l,start;
int dim[MAXL],dis[MAXL];
vector<int> v[MAXL];
int s[MAXL];
void bfs(int nod)
{
    int i,j;
    for(int i = 1; i <= n; ++i)
        dis[i] = -1;
    // initializare stiva
    l = 1;
    dis[nod] = 0;
    s[l] = nod;

    for(i = 1; i <= l; i++)
    {
        // folosesc fiecare element din stiva
        for(j = 0; j < dim[s[i]]; j++)
        {
            if(dis[v[s[i]][j]] == -1){
            // analizez vecinii
                s[++l] = v[s[i]][j]; // ii pun in stiva prin marirea lui ,,l"

                dis[s[l]] = dis[s[i]] + 1; // calculez distanta
            }
        }
    }
}
int main()
{
    in >> n >> m >> start;
    int x,y;
    for(int i = 1; i <= m ; ++i){
        in >> x >> y;
        v[x].push_back(y);
    }

    for(int i = 1; i <= n; ++i)
        dim[i] = v[i].size();

    bfs(start);

    for(int i = 1; i <= n; ++i)
        out << dis[i] << " ";
    return 0;
}