Cod sursa(job #2501722)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 30 noiembrie 2019 09:52:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <vector>
#include <queue>
#define maxVertices 101024

using namespace std;

int vertices,arces,startingVertice;
int sol[101024];

vector <int> graph[maxVertices];

void addV(int from,int to) {
    graph[from].push_back(to);
}

void read() {
    int i,from,to;
    scanf("%d%d%d",&vertices,&arces,&startingVertice);
    for(i=0;i<arces;++i) {
        scanf("%d%d",&from,&to);
        addV(from,to);
    }
}

void mmset() {
    int i;
    for(i=1;i<=vertices;++i) {
        sol[i]=-1;
    }
}

void fillVertices() {
    queue <int> lastVisited;
    int pos,i;
    lastVisited.push(startingVertice);
    sol[startingVertice]=0;
    while(!lastVisited.empty()) {
        pos=lastVisited.front();
        lastVisited.pop();
        for(auto&i:graph[pos]) {
            if(sol[i]<0) {
                sol[i]=sol[pos]+1;
                lastVisited.push(i);
            }
        }
    }
}

void solve() {
    mmset();
    fillVertices();
}

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

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