Pagini recente » Cod sursa (job #2906304) | Cod sursa (job #729654) | Cod sursa (job #2349719) | Cod sursa (job #2725169) | Cod sursa (job #2509509)
#include <fstream>
using namespace std;
const int N = 100001;
const int M = 2*N;
int lst[N], vf[2*M], urm[2*M], n, nr, d[N] = {-1}, q[N];
void adauga (int x, int y) {
vf[++nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void bfs (int x) {
int st, dr;
for (int i = 1; i <= n; i++ )
d[i] = -1;
st = 0;
dr = -1;
q[++dr] = x;
d[x] = 0;
while ( st <= dr ) {
int x = q[st++];
for ( int p = lst[x]; p; p = urm[p] ) {
int y = vf[p];
if ( d[y] == -1 ) {
q[++dr] = y;
d[y] = 1 + d[x];
}
}
}
}
int main () {
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
int m, s, x, y;
fin>>n>>m>>s;
for ( int i = 1; i <= n; i++ )
d[i] = -1;
for ( int i = 0; i < m; i++ ) {
fin>>x>>y;
adauga(x,y);
}
bfs(s);
for ( int i = 1; i <= n; i++ )
fout<<d[i]<<" ";
return 0;
}