Cod sursa(job #651346)

Utilizator PetroiuDorinPetroiu Dorin ALexandru PetroiuDorin Data 20 decembrie 2011 09:05:57
Problema BFS - Parcurgere in latime Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>
#define NMax 10001
FILE *f,*g;
int n,m,s,viz[NMax],C[NMax];
struct nod
{
    int inf;
    nod *urmatorul;
}*l[NMax];
void adaugare(nod *&p,int inf)
{
    nod *q=(nod*)malloc(sizeof(nod));
    q->inf=inf;
    q->urmatorul=p;
    p=q;
}
void read()
{
    int i,x,y;
    f=fopen("bfs.in","r");
    fscanf(f,"%d%d%d",&n,&m,&s);
    g=fopen("bfs.out","w");
    for(i=1;i<=n;i++)
        viz[i]=-1;
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d%d",&x,&y);
        adaugare(l[x],y);
    }
    fclose(f);
}
void bfs(int s)
{
    int p=1,u=1,x;
    nod *q;
    C[1]=s;
    viz[s]=0;
    while(p<=u)
    {
        x=C[p++];
        for(q=l[x];q;q=q->urmatorul)
        {
            if(viz[q->inf]==-1)
            {
                viz[q->inf]=viz[x]+1;
                C[++u]=q->inf;
            }
        }
    }
}
int main()
{
    int i;
    read();
    bfs(s);
    for(i=1;i<=n;i++)
       fprintf(g,"%d ",viz[i]);
    fclose(g);
    return 0;
}