Pagini recente » Cod sursa (job #2876580) | Cod sursa (job #401704) | Cod sursa (job #2625811) | Cod sursa (job #2502815) | Cod sursa (job #3158193)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
class Nod{
public:
int adancime;
vector <int> urmasi;
bool vizitat;
};
int main()
{
ifstream fin("bfs.in");
ofstream fout("bfs.out");
queue <Nod*> coada;
int n, m, s, x, y;
fin >> n >> m >> s;
vector <Nod*> graf(n);
for (int i = 0; i < n; i++) {
graf[i] = new Nod();
}
while(m)
{
fin >> x >> y;
graf[x-1]->urmasi.push_back(y);
m--;
}
coada.push(graf[s-1]);
graf[s-1]->vizitat = 1;
graf[s-1]->adancime = 0;
while(!coada.empty())
{
for(int i = 0; i != coada.front()->urmasi.size(); i++)
{
if(graf[coada.front()->urmasi[i]-1]->vizitat == 0)
{
graf[coada.front()->urmasi[i]-1]->adancime = coada.front()->adancime + 1;
graf[coada.front()->urmasi[i]-1]->vizitat = 1;
coada.push(graf[coada.front()->urmasi[i]-1]);
}
}
coada.pop();
}
for(int i = 0; i < n; i++)
{
if(graf[i]->vizitat == 0)
fout << -1 << " ";
else
fout << graf[i]->adancime << " ";
}
}