Cod sursa(job #1886239)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 20 februarie 2017 19:29:22
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <queue>
#include <list>
using namespace std;

int vertices, edges, start, x, y;
list<int> adj[100001];
int cost[100001];

void BFS(int start){
    queue<int> Q;
    Q.push(start);

    for(int i = 1; i <= edges; i++){
        cost[i] = -1;
    }
    cost[start]++;

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

int main(){

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

scanf("%d %d %d", &vertices, &edges, &start);

for(int i = 0; i < edges; i++){
    scanf("%d %d", &x, &y);
    adj[x].push_back(y);
}BFS(start);

for(int i = 1; i <= vertices; i++){
    printf("%d ", cost[i]);
}

return 0;
}