Pagini recente » Diferente pentru problema/armonioase intre reviziile 91 si 23 | Diferente pentru utilizator/luca_miscoci intre reviziile 4 si 1 | Cod sursa (job #1598619) | Diferente pentru problema/hoata2 intre reviziile 57 si 93 | Cod sursa (job #2660636)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100000
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
vector<int> listaArce[NMAX];
int n, m, s;
queue<int> coadaNoduri;
int costuri[NMAX];
void bfs(int nodStart)
{
coadaNoduri.push(nodStart);
costuri[coadaNoduri.front()] = 0;
while (!coadaNoduri.empty())
{
for (int i = 0; i < listaArce[coadaNoduri.front()].size(); i++)
{
if (costuri[listaArce[coadaNoduri.front()][i]] == -1)
{
costuri[listaArce[coadaNoduri.front()][i]] = costuri[coadaNoduri.front()] + 1;
coadaNoduri.push(listaArce[coadaNoduri.front()][i]);
}
}
coadaNoduri.pop();
}
for (int i = 1; i <= n; i++)
g << costuri[i] << ' ';
}
int main()
{
f >> n >> m >> s;
for (unsigned int i = 0; i < m; i++)
{
int nodS, nodD;
f >> nodS >> nodD;
listaArce[nodS].push_back(nodD);
}
for (int i = 1; i <= n; i++)
{
costuri[i] = -1;
}
bfs(s);
return 0;
}