Cod sursa(job #1452343)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 20 iunie 2015 16:40:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int Nmax = 100010;

int n , m , root , x , y;
int ans[Nmax];

vector < int > g[Nmax];

queue < int > q;

void bfs(int node)
{
    ans[node] = 0;
    for (q.push(node); !q.empty(); q.pop())
    {
        node = q.front();

        for (int i = 0; i < g[node].size(); ++i)
            if (ans[g[node][i]] == -1)
            {
                ans[g[node][i]] = ans[node] + 1;
                q.push(g[node][i]);
            }
    }
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);

    for (scanf("%d %d %d", &n, &m, &root); m ; --m)
    {
        scanf("%d %d", &x, &y);
        g[x].push_back(y);
    }

    for (int i = 1; i <= n; ++i)
        ans[i] = -1;

    bfs(root);

    for (int i = 1; i <= n; ++i)
        printf("%d ", ans[i]);

    return 0;
}