Cod sursa(job #1249411)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 26 octombrie 2014 23:03:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <vector>
#include <queue>

#define Nmax 100100
#define Neighbour Graph[Node][i]

using namespace std;

vector <int> Graph[Nmax];
queue <int> Queue;
int N, Source, Distance[Nmax];
bool used[Nmax];

void Bfs() {

    int i, Node;

    Distance[Source] = 1;
    Queue.push(Source);

    while(!Queue.empty()) {

        Node = Queue.front();
        Queue.pop();

        for(int i = 0; i < Graph[Node].size(); i++)
            if(Distance[Neighbour] == 0) {
                Distance[Neighbour] = Distance[Node] + 1;
                Queue.push(Neighbour);
                }

    }

}
void Read() {

    int x, y, M;

    ifstream in("bfs.in");
    in >> N >> M >> Source;

    while(M--) {
        in >> x >> y;
        Graph[x].push_back(y);
        }

    in.close();

}
void Write() {

    ofstream out("bfs.out");

    for(int i = 1; i <= N; i++)
        out << (Distance[i] == 0 ? -1 : (Distance[i] - 1)) << ' ';

    out << '\n';
    out.close();

}
int main() {

    Read();
    Bfs();
    Write();

    return 0;
}