Pagini recente » Cod sursa (job #2137297) | Cod sursa (job #1786921) | Istoria paginii descriere/ordonare/de-la-nave | Cod sursa (job #1571198) | Cod sursa (job #650928)
Cod sursa(job #650928)
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int info;
struct node *next;
} node;
node *L[100000];
long long N,M,S,cost[100000],coada[100000],viz[100000],current,last;
void BFS()
{ node *c;
coada[last]=S;
last++;
cost[S]=0;
viz[S]=1;
for(current=0;current<last;current++)
{ c=L[coada[current]];
while(c)
{
if(viz[c->info]==0)
{
coada[last]=c->info;
viz[c->info]=1;
cost[coada[last]]=cost[coada[current]]+1;
last++;
}
c=c->next;
}
}
}
int main(){
node *p,*q;
long long i,j,k;
FILE* fin,*fout;
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
fscanf(fin,"%lld %lld %lld",&N,&M,&S);
for(k=1;k<=M;k++)
{ fscanf(fin,"%lld %lld",&i,&j);
if(!(p=(node*)calloc(1,sizeof(node)))); //se adauga j in lista vecinilor lui i
p->info=j;
p->next=L[i];
L[i]=p;
}
fclose(fin);
for(i=1;i<=N;i++) cost[i]=-1;
BFS();
for(i=1;i<=N;i++) fprintf(fout,"%lld ",cost[i]);
fclose(fout);
return 0;
}