Cod sursa(job #269309)

Utilizator razyelxrazyelx razyelx Data 2 martie 2009 19:23:26
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream.h>
#define MAX 100
ifstream in("bfs.in");
ofstream out("bfs.out");
struct NOD{ int info;
	    NOD *urm;} *VF[MAX];

int a,n,m,s[MAX],d[MAX],st[MAX],prim,ultim;

void init(){
     int i;
     for(i=1;i<=n;++i)d[i] = s[i] = 0;
}

void adauga(NOD *&prim,int y){
     NOD *p;
     p = new NOD;
     p->info = y;
     p->urm = prim;
     prim = p;
}
void citire(){
     int x,y;
     in>>n>>m>>a;

     while(in>>x>>y)
	  adauga(VF[x],y);
}
int parcurge(int i){
    NOD *q;

    prim = ultim = 1;
    s[a] = 1;
    st[prim] = a;

    while(prim<=ultim){

	 for(q = VF[st[prim]];q!=NULL;q=q->urm)
	    if(!s[q->info])
	    {
	      st[++ultim] = q->info;
	      s[q->info] = 1;
	      d[q->info] = d[st[prim]]+1;

	      if(s[i]) return d[i];
	    }

	 prim++;
    }
    return -1;
}
int main(){
    citire();

    for(int i=1;i<=n;++i){
       if(a!=i)
	 out<<parcurge(i)<<" ";
       else
	 out<<0<<" ";
       init();
    }

    return 0;
}