Pagini recente » Cod sursa (job #486797) | Cod sursa (job #59116) | Borderou de evaluare (job #2296317) | Cod sursa (job #3239038) | Cod sursa (job #801850)
Cod sursa(job #801850)
#include <cstdio>
#include <cstdlib>
#define NMax 1000001
int n,m,S;
int steps[NMax], qu[NMax];
FILE *input, *output;
struct node
{
node *next;
int info;
};
node *Graph[NMax];
void add(int x,int y)
{
node *aux;
aux = (node*)malloc(sizeof(node));
aux -> next = Graph[x];
aux -> info = y;
Graph[x] = aux;
}
void read()
{
fscanf(input,"%d %d %d ",&n,&m,&S);
int x,y;
for(int i=0;i<m;++i)
{
fscanf(input,"%d%d",&x,&y);
add(x,y);
}
fclose(input);
}
void bfs()
{
int st,dr;
st = dr = 0;
steps[S] = 1;
qu[0] = S;
while(st<=dr)
{
for (node *x = Graph[qu[st]]; x; x=x->next)
if(!steps[x->info])
{
steps[x->info] = steps[qu[st]] + 1;
qu[++dr] = x->info;
}
++st;
}
}
void print()
{
for(int i=1;i<=n;++i)
printf("%d ", steps[i]-1);
printf("\n");
fclose(output);
}
int main()
{
input = freopen("bfs.in","r", stdin);
output = freopen("bfs.out","w", stdout);
read();
bfs();
print();
return 0;
}