Cod sursa(job #977058)

Utilizator Ionut228Ionut Calofir Ionut228 Data 24 iulie 2013 16:47:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>

using namespace std;

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

int N, M, S;
int cost[100001];
vector<int> V[100001];
queue<int> Q;
bool viz[100001];

void BF(int nod)
{
    memset(cost, -1, sizeof(cost));
    cost[nod] = 0;
    viz[nod] = true;
    while (!Q.empty())
    {
        int top = Q.front();
        Q.pop();
        for (vector<int>::iterator it = V[top].begin(); it != V[top].end(); ++it)
        {
            if (!viz[*it])
            {
                viz[*it] = true;
                cost[*it] = cost[top] + 1;
                Q.push(*it);
            }
        }
    }
}

int main()
{
    fin >> N >> M >> S;
    for (int i = 1, nod1, nod2; i <= M; ++i)
    {
        fin >> nod1 >> nod2;
        V[nod1].push_back(nod2);
    }

    Q.push(S);
    BF(S);

    for (int i = 1; i <= N; ++i)
        fout << cost[i] << " ";

    fin.close();
    fout.close();
    return 0;
}