Cod sursa(job #977049)

Utilizator Ionut228Ionut Calofir Ionut228 Data 24 iulie 2013 16:34:57
Problema BFS - Parcurgere in latime Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <queue>
#include <vector>

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], ok;

void BF(int nod)
{
    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])
            {
                if (*it == S)
                {
                    ok = true;
                    cost[*it] = 0;
                }
                else
                    cost[*it] = cost[top] + 1;
                viz[*it] = true;
                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)
    {
        if (i == S && ok)
            fout << "0" << " ";
        else if (cost[i] == 0)
            fout << "-1" << " ";
        else
            fout << cost[i] << " ";
    }

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