Pagini recente » Cod sursa (job #804430) | Cod sursa (job #1537759) | Cod sursa (job #2093689) | Cod sursa (job #2121107) | Cod sursa (job #2796523)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
class Graf{
int numar_noduri;
int numar_muchii;
int start;
vector<vector<int>> vecini;
public:
Graf(){
numar_muchii = 0;
numar_noduri = 0;
start = 0;
};
void citire_date_start();
void bfs(int);
int get_start();
};
int Graf::get_start(){
return start;
}
void Graf::bfs(int start){
vector<int> coada;
vector<int> drum_min(numar_noduri+1,-1);
vector<bool> vizitat(numar_noduri+1,false);
drum_min[start] = 0;
coada.push_back(start);
vizitat[start] = true;
int inc = 0, sf = 0;
while(inc <= sf){
for(int i = 0; i < vecini[coada[inc]].size(); i++)
if(vizitat[vecini[coada[inc]][i]] == false){
coada.push_back(vecini[coada[inc]][i]);
sf++;
drum_min[vecini[coada[inc]][i]] = drum_min[coada[inc]] + 1;
vizitat[vecini[coada[inc]][i]] = true;
}
inc++;
}
for(int i = 1; i <= numar_noduri; i++)
g<<drum_min[i]<<" ";
}
void Graf::citire_date_start(){
f>>numar_noduri;
f>>numar_muchii;
f>>start;
int n1,n2;
vecini.resize(numar_noduri+1);
for(int i = 0; i < numar_muchii; i++){
f>>n1>>n2;
vecini[n1].push_back(n2);
}
}
int main()
{
Graf a;
a.citire_date_start();
a.bfs(a.get_start());
return 0;
}