Cod sursa(job #1681929)

Utilizator TudorVersoiuVersoiu Tudor Sorin TudorVersoiu Data 9 aprilie 2016 20:23:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream f("bfs.in" );
ofstream g("bfs.out");

int NrNoduri, NrMuchii, start, x, y;

vector<int> vecini[100001];
bool     visit[100001];
int   distanta[100001];


void BFS(int A) {
    queue<int> coada;
    coada.push( A );
    visit[A] = 1;

    while ( !coada.empty() ) {
        for ( vector<int>::iterator it=vecini[coada.front()].begin() ; it!=vecini[coada.front()].end() ; it++ )
            if ( !visit[*it] ) {
                coada.push(*it);
                visit[*it] = 1;
                distanta[*it] = distanta[coada.front()] + 1;
            }
        coada.pop();
    }
}


int main() {
    f >> NrNoduri >> NrMuchii >> start;

    for ( int i=1 ; i<=NrMuchii ; i++ ) {
        f >> x >> y;

        vecini[x].push_back(y);
    }

    BFS(start);

    for ( int i=1 ; i<=NrNoduri ; i++ )
    {
        if ( !distanta[i] && i!=start ) distanta[i] = -1;
        g << distanta[i] << ' ';
    }
}