Pagini recente » Cod sursa (job #2689410) | Cod sursa (job #1541065) | Cod sursa (job #2916301) | Cod sursa (job #3193002) | Cod sursa (job #3155996)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
const int NMAX = 100000;
vector<int> G[NMAX + 1];
vector<int> distanta(NMAX + 1);
queue<int> coada;
bool vizitat[NMAX + 1];
int s, n, m;
void citire()
{
fin >> n >> m >> s;
for(int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
G[x].push_back(y);
}
}
void BFS(int start)
{
coada.push(start);
vizitat[coada.front()] = 1;
while(!coada.empty())
{
int varf = coada.front();
coada.pop();
if(G[varf].size() > 0)
for (int i = 0; i < G[varf].size(); i++)
{
if(vizitat[G[varf][i]] == 0)
{
coada.push(G[varf][i]);
distanta[G[varf][i]] = distanta[varf] + 1;
cout<<G[varf][i]<<" "<<distanta[G[varf][i]]<<" "<<distanta[varf]<<endl;
vizitat[G[varf][i]] = 1;
}
}
}
}
void afisare_distante()
{
for(int i = 1; i <= n; i++)
if (i == s)
fout<<0<<" ";
else if (distanta[i] == 0)
fout<<-1<<" ";
else
fout<<distanta[i]<<" ";
}
int main()
{
citire();
BFS(s);
afisare_distante();
fin.close();
return 0;
}