Pagini recente » Cod sursa (job #1107955) | Cod sursa (job #263602) | Cod sursa (job #2675368) | Cod sursa (job #1013004) | Cod sursa (job #361420)
Cod sursa(job #361420)
#include<stdio.h>
#include<vector>
using namespace std;
#define Nmax 100010
vector <int> A[Nmax];
int i, n, m, s, p, u, x, y;
int Lg[Nmax],Coada[Nmax], Cost[Nmax];
FILE * f = fopen("bfs.in", "r");
FILE * g = fopen("bfs.out", "w");
int main (){
fscanf (f, "%d %d %d", &n, &m, &s);
for (i = 1 ; i <= m ; i++) {
fscanf(f, "%d %d", &x, &y);
A[x].push_back(y);
}
for (i = 1 ; i <= n ; i++)
Lg[i] = A[i].size();
memset(Cost,-1,sizeof(Cost));
p = 1;
u = 2;
Coada[p] = s;
Cost[s] = 1;
while (p < u){
for (i = 0 ; i <= Lg[Coada[p]]-1 ; i++)
if (Cost[ A[ Coada[p] ][ i ] ] == -1) {
Coada[u] = A[Coada[p]][i];
Cost [ A[Coada[p]][i] ] = Cost[ Coada[p] ] + 1;
u++;
}
p++;
}
for (i = 1 ; i <= n ; i++)
if (Cost[i]!=-1) fprintf (g, "%d ", Cost[i] - 1);
else fprintf (g, "%d ", Cost[i]);
fclose(f);
fclose(g);
return 0;
}