Cod sursa(job #744281)

Utilizator psycho21rAbabab psycho21r Data 8 mai 2012 10:56:12
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

bool visited[100000];
vector<int> d(100000);

int main()
{
    int N, M, S;
    ifstream in("bfs.in");
    in >> N >> M >> S;
    vector< vector<int> > graph(N);
    for(int i = 0, a, b; i < M; ++i)
    {
        in >> a >> b;
        graph[a - 1].push_back(b - 1);
    }
    in.close();

    queue<int> queue;

    queue.push(S - 1);

    while(!queue.empty())
    {
        int node = queue.back();
        queue.pop();
        if(visited[node])
            continue;
        visited[node] = true;
        for(int i = 0; i < graph[node].size(); ++i)
        {
            if(!visited[graph[node][i]])
            {
                d[graph[node][i]] = d[node] + 1;
                queue.push(graph[node][i]);
            }
        }
    }
    ofstream out("bfs.out");
    for(int i = 0; i < N; ++i)
        out << (((d[i] == 0) && (i != S - 1)) ? -1 : d[i]) << " ";
    out.close();

    return 0;
}