Pagini recente » Cod sursa (job #1529677) | Cod sursa (job #2821190) | Cod sursa (job #108672) | Cod sursa (job #3161571) | Cod sursa (job #2637497)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define Nmax 100005
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
vector < int > Numere[Nmax];
queue < int > Coada;
int Distanta[Nmax];
void BFS()
{
int Nod;
while(!Coada.empty())
{
Nod = Coada.front();
Coada.pop();
for(unsigned int i = 0; i < Numere[Nod].size(); i ++)
{
int Vecin = Numere[Nod][i];
if(Distanta[Vecin] == -1) //daca nu e nodul de start sau nu a fost acolo
{
Coada.push(Vecin);
Distanta[Vecin] = Distanta[Nod] + 1; //noua distanta e egala cu distanta unde suntem noi + 1
}
}
}
}
void Read()
{
int nr_Varfuri, nr_Muchii, nod_Start;
fin >> nr_Varfuri >> nr_Muchii >> nod_Start;
for(int i = 1; i <= nr_Muchii; i ++)
{
int x, y;
fin >> x >> y;
Numere[x].push_back(y); //avem doar o singura directie,fiind graf orientat
}
for(int i = 1; i <= nr_Varfuri; i ++)
Distanta[i] = -1; //facem toate distantele nodurilor -1
Distanta[nod_Start] = 0;
Coada.push(nod_Start); //!Coada.empty() pentru ca bagam nodul de start
BFS();
for(int i = 1; i <= nr_Varfuri; i ++)
fout << Distanta[i] << " ";
}
int main()
{
Read();
return 0;
}