Cod sursa(job #246869)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 21 ianuarie 2009 18:43:38
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream.h>
#include <fstream.h>

#define IN "bfl.in"
#define OUT "bfl.out"
#define maxx 101

ifstream fin(IN);
ofstream fout(OUT);

struct nod
{
 int info;
 nod *urm;
}*l[maxx];

int n,m;
int nd;
int timp;
int t[maxx],d[maxx],c[maxx];
char u[maxx];
int zz;

void citire();
void afis();
void bf(int k);
void add(int x,int y);

int main()
{
 citire();
  fin.close();

 bf(nd);

 afis();
  fout.close();

return 0;
}

void citire()
{
 int i;
 int x,y;

 fin>>n>>m>>nd;

 for(i=1;i<=m;i++)
 {
  fin>>x>>y;
  add(x,y);
 }
}

void afis()
{
 int i,j;
 nod *q;

 /*for(i=1;i<=n;i++)
 {
  q=l[i];

  fout<<i<<"   ";
  while(q)
  {
   fout<<q->info<<" ";
   q=q->urm;
  }
  fout<<endl;
 }
*/
 for(i=1;i<=n;i++)
  if(i==nd)
   fout<<"0 ";
  else 
   if(d[i]==0)
    fout<<"-1 ";
   else  
    fout<<d[i]<<" ";
}

void add(int x,int y)
{
 nod *q;

 q=new nod;
 q->info=y;
 q->urm=l[x];
 l[x]=q;

}


void bf(int k)
{
 nod *p;
 int inf,st,dr;

 memset(u,0,sizeof(u));

 st=dr=1;

 c[st]=k;
 u[k]=1;

 for(d[k]=0;st<=dr;st++)
 {
  inf=c[st];
   for(p=l[inf];p!=NULL;p=p->urm)
    if(!u[p->info])
    {
     u[c[++dr] = p->info]=1;
     d[p->info]=d[inf]+1;
     t[p->info]=inf;
    }
 }
 zz=dr;
}