Cod sursa(job #633072)

Utilizator VladberilaVladutz Vladberila Data 12 noiembrie 2011 22:30:22
Problema BFS - Parcurgere in latime Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>
FILE *f,*g;
int **A,*C,m,n,s,*viz;
void citire()
{
    int i,x,y;
    f=fopen("bfs.in","r");
    fscanf(f,"%d%d%d",&n,&m,&s);
    g=fopen("bfs.out","w");
    A=(int**)malloc((n+1)*sizeof(int*));
    for(i=1;i<=n;i++)
    {
        A[i]=(int*)malloc(sizeof(int));
        A[i][0]=0;
    }
    C=(int*)malloc((n+1)*sizeof(int));
    viz=(int*)malloc((n+1)*sizeof(int));
    for(i=1;i<=n;i++)
        viz[i]=-1;
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%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(f);
}
void bfs(int s)
{
    int p=1,u=1,x,i;
    C[1]=s;
    viz[s]=0;
    while(p<=u)
    {
        x=C[p];
        for(i=1;i<=A[x][0];i++)
        {
            if(viz[A[x][i]]==-1)
            {
                viz[A[x][i]]=viz[x]+1;;
                C[++u]=A[x][i];
            }
        }
        p++;
    }
}
int main()
{
    int i;
    citire();
    bfs(s);
    for(i=1;i<=n;i++)
       fprintf(g,"%d ",viz[i]);
    fclose(g);
    return 0;
}