Cod sursa(job #1181754)

Utilizator TimeAttackTimer Roby TimeAttack Data 3 mai 2014 16:50:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
/*
    Keep It Simple!
*/


#include<fstream>
#include<vector>
#include<list>

using namespace std;

#define MaxN 100005

int N,M,S;
int Dist[MaxN];
vector<int> G[MaxN];
list<int> Queue;
bool viz[MaxN];

void BFS(int Source)
{
    Queue.push_back(Source);
    Dist[Source] = 0;

    while(Queue.size())
    {
        int node = Queue.front();
        Queue.pop_front();

        viz[node] = 1;
        for(size_t i=0; i<G[node].size(); i++)
            if(!viz[G[node][i]])
                {
                    Dist[G[node][i]] = 1 + Dist[node];
                    viz[G[node][i]] = 1;
                    Queue.push_back(G[node][i]);
                }
    }
}

int main()
{
    ifstream f("bfs.in");
    ofstream g("bfs.out");

    f >> N >> M >> S;
    int x,y;
    for(int i=1;i<=M;i++)
    {
        f >> x >> y;
        G[x].push_back(y);
    }

    BFS(S);

    for(int i=1;i<=N;i++)
    {
        if(Dist[i] == 0 && i != S)
            Dist[i] = -1;
        g << Dist[i] << " ";
    }
}