Pagini recente » Cod sursa (job #2724959) | Cod sursa (job #2425511) | Cod sursa (job #2930244) | Cod sursa (job #2820862) | Cod sursa (job #875018)
Cod sursa(job #875018)
#include <cstdio>
#include <stdlib.h>
using namespace std;
int n,m,pr,ul,start;
int * A[100001];
int vizitat[100001];
int q[100001],cost[100001];
void citire(){
freopen("bfs.in","r",stdin);
fscanf(stdin,"%d%d%d",&n,&m,&start);
int x,y;
for(int i=1;i<=n;i++){
A[i] = (int *)realloc(A[i],sizeof(int));
A[i][0] = 0;
}
for(int i=1;i<=m;i++){
fscanf(stdin,"%d%d", &x ,&y);
A[x][0]++;
A[x] = (int *)realloc(A[x],(A[x][0]+1)*sizeof(int));
A[x][A[x][0]] = y;
}
fclose(stdin);
}
void BFS(int nod){
vizitat[nod] = 1;
q[0] = nod;
cost[nod] = 0;
while(pr<=ul){
nod = q[pr++];
for(int i=1;i<=A[nod][0];i++)
if(!vizitat[A[nod][i]]){
vizitat[A[nod][i]] = 1;
q[++ul] = A[nod][i];
cost[A[nod][i]] = cost[nod]+1;
}
}
}
void afisare(){
freopen("bfs.out","w",stdout);
for(int i=1;i<=n;i++)
fprintf(stdout,"%d ", cost[i]);
}
int main(){
citire();
for(int i=1;i<=n;i++)
cost[i] = -1;
BFS(start);
afisare();
fclose(stdout);
return 0;
}