Cod sursa(job #650928)

Utilizator FIIGLMFIIGherasimLupascuMiron FIIGLM Data 19 decembrie 2011 11:57:20
Problema BFS - Parcurgere in latime Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.51 kb
#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;
}