Cod sursa(job #2531591)

Utilizator danbesuDan Besu danbesu Data 26 ianuarie 2020 14:46:34
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include<iostream>
#include<algorithm>
#include<vector>
#include<fstream>
#include<queue>

using namespace std;
vector <int> g[100001];
queue <int> c;
int dist[100001];

void BFS(int nod){
    dist[nod] = 0; /// distanta de la nodul de start la el insusi va fi 0

    while(!c.empty()){
        int nod_curent = c.front(); /// introduc in coada nodul la care sunt
        c.pop(); /// scot primul nod

        for(int i = 0; i < g[nod_curent].size(); ++i){  ///parcurc vecinii nodului curent
            int vecin = g[nod_curent][i];
            if(dist[vecin] == -1){  /// daca n-am mai trecut prin acest nod, ii actualizez distanta
                c.push(vecin);      /// si il introduc in coada
                dist[vecin] = dist[nod_curent] + 1;  /// noua distanta se va aduna cu 1 la cea veche
            }
        }
    }
}

int main() {

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

	int n, m, s;
	in >> n >> m >> s;

    ///citire: adaug vecinii nodului g[a]
	for (int i = 0; i < m; ++i) {
		int a, b;
		in >> a >> b;
		g[a].push_back(b);
	}

    /*///afisez listele de vecini
	out << '\n';
	for (int i = 1; i <= n; ++i) {
		out << i << "-";
		for (int j = 0; j< g[i].size(); ++j)
			out << g[i][j] << ' ';
		out << '\n';
	}*/


	for (int i = 1; i <= n; ++i)
		dist[i] = -1;

	c.push(s);
	BFS(s);

	for (int i = 1; i <= n; ++i)
		out << dist[i] << ' ';

	return 0;
}