Pagini recente » Cod sursa (job #1203112) | Cod sursa (job #2901240) | Cod sursa (job #1921688) | Cod sursa (job #2811591) | Cod sursa (job #2787294)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in ("bfs.in");
ofstream out("bfs.out");
const int maxim = 100001;
int distante[maxim];
bool vizitate[maxim];
class Graf{
int noduri, muchii;
//lista de adiacenta
vector<int> listaAdiacenta[maxim];
public:
void construieste(int start, int final);
Graf(int noduri, int muchii);
void bfs(int nodStart);
};
void Graf::construieste(int start, int final) {
listaAdiacenta[start].push_back(final);
}
Graf::Graf(int noduri, int muchii) : noduri(noduri), muchii(muchii) {}
void Graf::bfs(int nodStart) {
queue<int> queueBfs;
queueBfs.push(nodStart);
vizitate[nodStart] = true;
distante[nodStart] = 0;
while(!queueBfs.empty())
{
int nodCurent = queueBfs.front();
for(int i=0; i<listaAdiacenta[nodCurent].size(); i++)
{
if(!vizitate[listaAdiacenta[nodCurent][i]])
{
vizitate[listaAdiacenta[nodCurent][i]] = true;
queueBfs.push(listaAdiacenta[nodCurent][i]);
distante[listaAdiacenta[nodCurent][i]] = 1 + distante[nodCurent];
}
}
queueBfs.pop();
}
}
void afisareDistante(int nrNoduri){
for(int i=1; i<=nrNoduri; i++)
out<<distante[i]<<" ";
}
int main() {
int noduri, muchii, x, y, nodStart;
std::fill(std::begin(distante), std::begin(distante)+maxim, -1);
std::fill(std::begin(vizitate), std::begin(vizitate)+maxim, false);
in>>noduri>>muchii>>nodStart;
Graf mygraf(noduri, muchii);
for(int i=0; i<muchii; i++)
{
//muchie de la x la y
in>>x>>y;
mygraf.construieste(x, y);
}
mygraf.bfs(nodStart);
afisareDistante(noduri);
return 0;
}