Pagini recente » Cod sursa (job #41736) | Cod sursa (job #37183) | Cod sursa (job #672437) | Cod sursa (job #585926) | Cod sursa (job #2813332)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
///CLASA MARIA DUTU
class graf{
private:
int nrNoduri, nrMuchii, start;
vector<vector<int>> listaAd;
vector<int> distante;
void bfs();
public:
graf(int nrNoduri, int nrMuchii, int start) : nrNoduri(nrNoduri), nrMuchii(nrMuchii) , start(start){
listaAd.resize(nrNoduri + 1);
distante.resize(nrNoduri + 1, -1);
};
void adaugareInListaAd(const int &nod1, const int &nod2);
void afisare();
};
void graf:: adaugareInListaAd(const int &nod1, const int &nod2) {
listaAd[nod1].push_back(nod2);
}
void graf::bfs() {
queue<int> coada;
coada.push(start);
distante[start] = 0;
while(!coada.empty()){
int nod = coada.front();
for(int i = 0; i < listaAd[nod].size(); i ++){
if(distante[listaAd[nod][i]] == -1){
coada.push(listaAd[nod][i]);
distante[listaAd[nod][i]] = distante[nod] + 1;
}
}
coada.pop();
}
}
void graf::afisare() {
bfs();
for(int i = 1; i <= nrNoduri; i ++){
fout<<distante[i]<<" ";
}
}
int main() {
int n, m, s;
fin >> n >> m >> s;
graf G(n, m, s);
for(int i = 0; i < m; i ++){
int n1, n2;
fin >> n1 >> n2;
G. adaugareInListaAd(n1, n2);
}
G.afisare();
return 0;
}