Cod sursa(job #1244694)

Utilizator negrea.andreiAndrei Negrea negrea.andrei Data 17 octombrie 2014 23:42:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define N 100005

using namespace std;

int* bfs(vector<int> adjList[], int n, int s)
{
    queue<int> Q;
    int* dist = new int[n + 5];

    for(int i = 0; i <= n; i++)
    {
        dist[i] = -1;
    }

    Q.push(s);
    dist[s] = 0;

    while (!Q.empty())
    {
        int current = Q.front();
        Q.pop();
        for(vector<int>::iterator it = adjList[current].begin(); it != adjList[current].end(); it++)
        {
            if (dist[*it] == -1)
            {
                dist[*it] = dist[current] + 1;
                Q.push(*it);
            }
        }
    }

    return dist;
}
int main()
{
    int n, m, s;
    vector<int> adjList[N];

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

    f >> n >> m >> s;
    for (int i = 1; i <= m; i++)
    {
        int x, y;
        f >> x >> y;
        adjList[x].push_back(y);
    }

    int* dist = bfs(adjList, n, s);

    for(int i = 1; i <= n; i++)
    {
      g << dist[i] << " ";
    }

    return 0;
}