Cod sursa(job #1705361)

Utilizator mihainicolae80Mihai Nicolae mihainicolae80 Data 20 mai 2016 13:11:50
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <list>
#include <vector>
#include <queue>

using namespace std;

#define NOT_VIS -1

struct Node{
    int dist;
    list<int> neigh;

    Node(){
        dist = NOT_VIS;
    }
};

vector<Node> nodes;

void BFS(int cnode){

    queue<int> qu;

    //Descopera descendentii neparcursi
    list<int>::iterator it;
    for(it = nodes[cnode].neigh.begin();
        it != nodes[cnode].neigh.end();
        it ++){

        if(nodes[*it].dist == NOT_VIS){
            qu.push(*it);
            nodes[*it].dist = nodes[cnode].dist + 1;
        }
    }
    //Parcurge descendentii
    while(!qu.empty()){
        BFS(qu.front());
        qu.pop();
    }
}

int main(){

    int N, M, S;
    int i,u,v;


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

    in >> N >> M >> S;

    nodes.resize(N+1);

    for(i = 0; i < M; i++){
        in >> u >> v;
        nodes[u].neigh.push_back(v);
    }

    nodes[S].dist = 0;
    BFS(S);

    for(i = 1; i <= N; i++)
    out<<nodes[i].dist<<" ";

    in.close();
    out.close();

    return 0;
}