Cod sursa(job #2015456)

Utilizator lulian23Tiganescu Iulian lulian23 Data 26 august 2017 12:08:15
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define maxn 100001

using namespace std;

int n, m, l , start;
vector < int > a[ maxn ];
int g[ maxn ], s[ maxn ], cost[ maxn ];

void parcurgere(int nod){
    memset(cost, -1, sizeof(cost));
    l = 1;
    cost[ nod ] = 0;
    s[ l ] = nod;
    for (int i = 1; i <= l; i++)
        for (int j = 0; j < g[s[ i ]]; j++)
          if (cost[ a[ s [ i ]][ j ]] == -1){
            s[ ++l ] = a[ s [ i ]][ j ];
            cost[ s [ l ] ] = cost[ s[ i ] ] + 1;
          }
}


int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    scanf("%d %d %d ", &n, &m, &start);
    int x, y;
    for (int i = 1; i <= m; i++){
        scanf("%d %d ", &x, &y);
        a[ x ].push_back( y );
    }
    for (int i = 1; i <= n; i++)
        g[ i ] = a[ i ].size();
    parcurgere( start );
    for (int i = 1; i <= n; i++)
        printf("%d ", cost[ i ]);
    printf("\n");
}