Pagini recente » Cod sursa (job #2897066) | Cod sursa (job #2816568) | Cod sursa (job #397648) | Cod sursa (job #990844) | Cod sursa (job #2224235)
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
#define DIM 100010
using namespace std;
vector<int> L[DIM];
int d[DIM], v[DIM], c[DIM], T[DIM], sol[DIM], k;
int n, m, s, x, y, i, p, u, nod, vecin;
void drum(int x) {
if (x!=0) {
drum(T[x]);
cout<<x<<" ";
}
}
int main () {
ifstream fin ("bfs.in");
ofstream fout("bfs.out");
fin>>n>>m>>s;
for (i=1;i<=m;i++) {
fin>>x>>y;
L[x].push_back(y);
///L[y].push_back(x);
}
for (i=1;i<=n;i++)
sort(L[i].begin(), L[i].end());
c[1] = s;
v[s] = 1;
p = 1;
u = 1;
d[s] = 1;
while (p <= u) {
nod = c[p];
for (i=0;i<L[ nod ].size(); i++) {
vecin = L[nod][i];
if (v[vecin] == 0) {
c[++u] = vecin;
d[vecin] = 1 + d[nod];
v[vecin] = 1;
T[vecin] = nod; /// t va fi vectorul de tati al arboreluui drumurilor minime
}
}
p++;
}
for (i=1;i<=n;i++)
fout<<-1 + d[i]<<" ";
int x;
///cin>>x;
/// drumul minim de la x la s
/*
while (x!=0) {
///cout<<x<<" ";
sol[++k] = x;
x = T[x];
}
for (int i=k;i>=1;i--)
cout<<sol[i]<<" ";
*/
///drum(x);
return 0;
}