Cod sursa(job #1851533)

Utilizator danyvsDan Castan danyvs Data 19 ianuarie 2017 21:01:17
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int NMAX = 100005;

int n, m, source;
vector < vector < int > > graph(NMAX);
int edges[NMAX];
bool seen[NMAX];

void read()
{
    int x, y;
    scanf("%d %d %d", &n, &m, &source);
    for (int i = 1; i <= m; ++ i)
        {
         scanf("%d %d", &x, &y);
         graph[x].push_back(y);
        }
}

void bfs(int source)
{
    int node;
    queue < int > Q;
    vector < int > :: iterator it;
    Q.push(source);
    seen[source] = true;
    while (!Q.empty())
        {
         node = Q.front();
         Q.pop();
         for (it = graph[node].begin(); it != graph[node].end(); ++ it)
            if (!seen[*it])
                {
                 edges[*it] = edges[node] + 1;
                 Q.push(*it);
                 seen[*it] = true;
                }
        }
}

void print()
{
    int i;
    for (i = 1; i <= n; ++ i)
        if (seen[i])
            printf("%d ", edges[i]);
        else
            printf("-1 ");
    printf("\n");
}

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    read();
    bfs(source);
    print();
    return 0;
}