Cod sursa(job #1571041)

Utilizator cristid9Cristi D cristid9 Data 17 ianuarie 2016 00:27:05
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <queue>

using namespace std;

vector<int> edges[1000001];
int visited[100001];
int accesses[100001];

int vertices, arcs, s;

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

int main()
{

    fin >> vertices >> arcs >> s;

    for (int i = 1; i <= vertices; i++)
        visited[i] = -1;

    while (arcs--)
    {
        int v, w;
        fin >> v >> w;

        edges[v].push_back(w);
    }

    queue<pair<int, int>> q;
    q.push(make_pair(s, 0));
    visited[s] = 0;

    while (!q.empty())
    {
        pair<int, int> parent = q.front();
        accesses[parent.first]++;
        q.pop();

        for (auto it = edges[parent.first].begin();
             it != edges[parent.first].end(); it++)
        {
            if (visited[*it] == -1)
            {
                q.push(make_pair(*it, parent.second + 1));
                visited[*it] = parent.second + 1;
            }
        }
    }

    for (int i = 1; i <= vertices; i++)
        fout << visited[i] << " ";
    fout << endl;

    fout.close();
    fin.close();

    return 0;
}