Cod sursa(job #1430728)

Utilizator cruceru_vlad_ionut_321CACruceru Vlad - Ionut 321CA cruceru_vlad_ionut_321CA Data 8 mai 2015 19:17:47
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

int N, M;
bool viz[100001];
vector<int> dist(100001, -1);

void bfs(int nod, const vector<vector<int> > &vec)
{
    queue<int> coada;
    coada.push(nod);
    viz[nod] = true;
    dist[nod] = 0;
    while(!coada.empty())
    {
        nod = coada.front();
        coada.pop();
        int nr_vec = vec[nod].size();
        for(int i = 0; i < nr_vec; i++)
            if(viz[ vec[nod][i] ] == false)
            {
                viz[vec[nod][i]] = true;
                dist[vec[nod][i]] = dist[nod] + 1;
                coada.push(vec[nod][i]);
            }
    }
}

int main()
{
    FILE *f = fopen("bfs.in", "r");
    FILE *g = fopen("bfs.out", "w");
    int root;
    fscanf(f, "%d %d %d", &N, &M, &root);
    vector<int> aux;
    vector<vector<int> > vecini(N + 1, aux);
    for(int i = 0; i < M; i++)
    {
        int x, y;
        fscanf(f, "%d %d", &x, &y);
        vecini[x].push_back(y);
    }
    bfs(root, vecini);

    for(int i = 1; i <= N; i++)
        fprintf(g, "%d ", dist[i]);

    fprintf(g, "\n");
    fclose(f);
    fclose(g);

    return 0;
}