Pagini recente » Cod sursa (job #1264459) | Cod sursa (job #678400) | Cod sursa (job #1944475) | Cod sursa (job #865039) | Cod sursa (job #2796356)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
class Graf
{
int nr_N, nr_M, S;
vector<int> adiac[100001];
public:
/// Constructori
Graf() : nr_N(0), nr_M(0) {}
Graf(int N, int M) : nr_N(N), nr_M(M) {}
void citire();
void BFS();
};
void Graf::citire()
{
in >> nr_N >> nr_M >> S;
for (int i = 0; i < nr_M; i++)
{
int x, y;
in >> x >> y;
adiac[x].push_back(y);
}
}
void Graf::BFS()
{
queue <int> coada;
int nod;
int vizitat[100001] = {};
vizitat[S] = 1;
coada.push(S);
int cost[100001] = {};
cost[S] = 0;///Costul la nodul de start este 0
while(coada.size() > 0) ///Cat timp inca mai am noduri in graf
{
nod = coada.front();
for(int j = 0; j < adiac[nod].size(); j++)
{
if(vizitat[adiac[nod][j]] == 0)
{
coada.push(adiac[nod][j]);
cost[adiac[nod][j]] = cost[nod] + 1;
vizitat[adiac[nod][j]]++;
}
}
coada.pop();
}
for(int i = 1; i <= nr_N; i++)
{
if(vizitat[i] == 0) out << "-1 "; else out << cost[i] << " ";
}
}
int main()
{
Graf G;
G.citire();
G.BFS();
return 0;
}