Pagini recente » Cod sursa (job #848878) | Cod sursa (job #2154968) | Cod sursa (job #2986091) | Cod sursa (job #668819) | Cod sursa (job #2003332)
#include <fstream>
#include <cstdio>
#define nvf 100000
#define nmu 1000000
using namespace std;
int la[nvf][80]; /// lista de adiacenta
int nvec[nvf]; /// nr de vecini
bool viz[nvf]; /// varf vizitat
int dist[nvf]; /// distanta
int cd[nvf]; /// coada
int main () {
ifstream fin ( "bfs.in" );
ofstream fout ( "bfs.out");
int n, m, s;
fin >> n >> m >> s;
s--;
int i, a, b;
for ( i = 0; i < m; i++ ) {
fin >> a >> b;
a--;
b--;
la[a][nvec[a]++] = b;
}
viz[s] = 1;
cd[0] = s;
for ( i = 0; i < n; i++ )
dist[i] = -1;
dist[s] = 0;
int pr, ut;
pr = ut = 0;
while ( pr <= ut ) {
for ( i = 0; i < nvec[cd[pr]]; i++ ) {
if ( viz[ la[cd[pr]][i] ] == 0 ) { /// calculul distantei + vizita + introducere in coada
viz[ la[cd[pr]][i] ] = 1;
dist[ la[cd[pr]][i] ] = 1 + dist[ cd[pr] ];
cd[++ut] = la[ cd[pr] ][i];
}
}
pr++;
}
for ( i = 0; i < n; i++ )
fout << dist[i] << ' ';
fin.close();
fout.close();
return 0;
}