Cod sursa(job #713586)

Utilizator StefanLacheStefan Lache StefanLache Data 14 martie 2012 19:36:17
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include<stdio.h>
#include<stdlib.h>
struct nod
{
    int info;
    nod *adr_urm;
};
nod* POP(nod *&cap)
{
    nod *d=cap;
    cap=cap->adr_urm;
    return d;
}
void PUSH(nod *&cap,nod *&coada,int i)
{
    if(!cap)
        {
            nod *d=(nod *)malloc(1*sizeof(nod));
            d->info=i;
            d->adr_urm=NULL;
            coada=d;
            cap=d;
            return ;
        }
    nod *p=(nod *)malloc(1*sizeof(nod));
    p->info=i;
    p->adr_urm=NULL;
    coada->adr_urm=p;
    coada=p;
}
nod *v[10],*coada,*cap;
int viz[10],dist[10];
void BF(int s)
{
    viz[s]=1;
    PUSH(cap,coada,s);
    while(cap)
    {
        nod *h=POP(cap);
        int k=h->info;
        printf("%i ",k);
        while(v[k])
        {
            if(viz[v[k]->info] == 0)
                {
                    dist[v[k]->info]= 1 + dist[k];
                    PUSH(cap,coada,v[k]->info);
                    viz[v[h->info]->info]=1;
                }
            v[h->info]=v[h->info]->adr_urm;
        }
    }
}
int main()
{
    nod *d;
    int N,M,S,i,nr1,nr2;
    FILE *f=fopen("bfs.in","rt");
    FILE *g=fopen("bfs.out","wt");
    fscanf(f,"%i%i%i",&N,&M,&S);
   while(!feof(f))
   {
       fscanf(f,"%i%i",&nr1,&nr2);
       nod *p=(nod *)malloc(1*sizeof(nod));
       p->info=nr2;
       p->adr_urm=v[nr1];
       v[nr1]=p;
   }
   BF(S);
   for(i=1;i<=N;i++)
    if(dist[i]==0 && i!=S)
        fprintf(g,"-1 ");
    else fprintf(g,"%i ",dist[i]);
    return 0;
}