Cod sursa(job #2560651)

Utilizator Iosif02Oprea Iosif Iosif02 Data 28 februarie 2020 10:32:48
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

const int N= 105;
vector <int> muchii[N];
queue <int> vecini;
int n, m, x, distanta[N];

void sortare(unsigned int nod) {
    for(unsigned int i = 0; i < muchii[nod].size(); i++) {
        for(unsigned int j = i; j < muchii[nod].size(); j++) {
            if(muchii[nod][i] > muchii[nod][j]) {
                int aux = muchii[nod][i];
                muchii[nod][i] = muchii[nod][j];
                muchii[nod][j] = aux;
            }
        }
    }
}

void BFS(int nodStart) {
    int Vecin, Nod;

    distanta[nodStart] = 0;
    vecini.push(nodStart);

    while(!vecini.empty()) {
        Nod = vecini.front();
        vecini.pop();
        for(int i = 0; i < muchii[Nod].size(); i++) {
            Vecin = muchii[Nod][i];
            if(distanta[Vecin] == -1) {
                distanta[Vecin] = distanta[Nod] + 1;
                vecini.push(Vecin);
            }
        }
    }
}

void citire() {
    for(int i=1;i<=m;i++) {
        int x, y;
        in>>x>>y;
        muchii[x].push_back(y);
    }

    for(int i = 1; i <= n; i++) {
        sortare(i);
        distanta[i] = -1;
    }
}

int main() {
    in >> n >> m >> x;

    citire();
    BFS(x);

    for(int i = 1; i <= n; i++)
        out << distanta[i] << " ";

    return 0;
}