Pagini recente » Cod sursa (job #2887173) | Cod sursa (job #203242) | Rating Iulian Musat (iulianmusat02) | Cod sursa (job #2354721) | Cod sursa (job #2638279)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int nr_noduri, m, start;
const int m_lim = 100005;
vector <int> muchii[m_lim];
/*
Presupunerile :
*/
// 0 - este chiar nodul de start
// -1 - nu putem ajunge la el
// >(mai mare ca 0) - aia e distanta
int Distanta[m_lim];
queue <int> coada;
void citire()
{
int x, y;
f.in >> nr_noduri >> m >> start;
for (int i = 1; i <= m; i++) {
cin >> x >> y;
muchii[x].push_back(y);
}
for (int i = 1; i <= nr_noduri; i++)
Distanta[i] = -1; // toate sunt -1
Distanta[start] = 0; // dist. init. 0
}
void BFS()
{
int nod, vecin;
while (!coada.empty) // cat timp coada nu este goala
{
nod = coada.front(); // extragem primul elem din caoda
coada.pop(); /* stergem elementul din coada
parcurgem vecinii pt fiecare element al nodului cureny*/
for (unsigned int i = 0; i < muchii[nod].size; i++)
{
vecin = muchii[nod][i];
if (Distanta[vecin] = -1)//daca dist pana la vecin este -1
{
//il punem in coada
coada.push(vecin);
//dist de vecin, dist din prezent +1
//am mers inca o unitate
Distanta[vecin] = Distanta[nod] + 1;
}
}
}
}
int main()
{
citire();
coada.push(start); // bagam in coada "nodul de start"
BFS();
for (int i = 1; i <= nr_noduri; i++)
g << Distanta[i] << " ";
//afisarea distantelor
return 0;
}