Pagini recente » Cod sursa (job #507811) | Cod sursa (job #1049111) | Cod sursa (job #1579162) | Istoria paginii runda/bulangandit8/clasament | Cod sursa (job #2799029)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
class Graf
{
private:
int Noduri, Muchii;
vector <vector<int>> ListaAdiacenta;
public:
Graf(){}
Graf( int Noduri, int Munchii, vector <vector<int>> ListaAdiacenta)
{
this->Noduri = Noduri;
this->Muchii = Muchii;
this->ListaAdiacenta= ListaAdiacenta;
}
~Graf()
{
this->Noduri = 0;
this->Muchii = 0;
this->ListaAdiacenta.clear();
}
void SetNoduri(int n)
{
Noduri = n;
}
int GetNoduri()
{
return Noduri;
}
void SetMuchii(int m)
{
Muchii = m;
}
int GetMuchii()
{
return Muchii;
}
void codBFS(int s);
};
void Graf::codBFS(int s)
{
queue <int> coada;
int distanta[Noduri+1] = {0};
bool vizitat[Noduri+1] = {false};
vizitat[s] = true;
coada.push(s);
while(coada.size()!= 0)
{
for (int nod : ListaAdiacenta[coada.front()])
{
if(vizitat[nod]==false)
{
vizitat[nod]=true;
distanta[nod]=distanta[coada.front()]+1;
coada.push(nod);
}
}
coada.pop();
}
for(int i= 1; i <= Noduri; i++)
if(s!=i && distanta[i]==0)
g<<-1<<' ';
else
g<<distanta[i]<<' ';
}
void Bfs()
{
int n, m, x, y, s;
f>>n>>m>>s;
vector <vector<int>> ListaAdiacenta(n+1);
for(int i= 0; i < m; i++)
{
f>>x>>y;
ListaAdiacenta[x].push_back(y);
}
Graf G(n, m, ListaAdiacenta);
G.codBFS(s);
}
int main()
{
Bfs();
f.close();
g.close();
return 0;
}