Cod sursa(job #1016418)

Utilizator BFlorin93Balint Florin-Lorand BFlorin93 Data 26 octombrie 2013 11:11:54
Problema BFS - Parcurgere in latime Scor 50
Compilator c Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>

/** Balint Florin-Lorand
    BFS-tree
*/

int neighbours[100000][2000];
int size_n[100000];
int dis[1000];
int visit[100000];
 FILE *t;
 FILE *g;

void readedges(int n,int m)
{
  int x,y;
  int i;
  for (i=1;i<=n;i++) size_n[i]=0;
  printf("\n");
  for (i=1;i<=m;i++)
   {
    fscanf(t,"%d %d",&x,&y);
    ++size_n[x];
    neighbours[x][size_n[x]]=y;
   }

}

void BFS_init(int n,int source)
{
    int i;
  for(i=1;i<=n;i++)   {dis[i]=-1;visit[i]=0;}
  dis[source]=0;
  visit[source]=1;
}


void BFS(int n,int source)
{
  int i,k=1;
  int bfs_list[n];
  bfs_list[1]=source;
  int j;
   for (i=1;i<=k;i++)
     {
     if (k==n) break;
       for (j=1;j<=size_n[bfs_list[i]];j++)
       {
        if (visit[neighbours[bfs_list[i]][j]]==0)
           {
             dis[neighbours[bfs_list[i]][j]]=dis[bfs_list[i]]+1;
             visit[neighbours[bfs_list[i]][j]]=1;
             k++;bfs_list[k]=neighbours[bfs_list[i]][j];
           }

       }
     }

  for (i=1;i<=n;i++) fprintf(g,"%d ",dis[i]);

}

int main()
{
  int n,m,s;


  t=fopen("bfs.in","r");
  g=fopen("bfs.out","w");

  fscanf(t,"%d %d %d",&n,&m,&s);
  readedges(n,m);

  BFS_init(n,s);
  BFS(n,s);

  fclose(t);
  fclose(g);
    return 0;
}