Cod sursa(job #662229)

Utilizator galbenugalbenu dorin galbenu Data 16 ianuarie 2012 10:18:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<iostream>
#include<fstream>
#define lmax 1000000
#define nmax 100000
#define INFINIT 0x3f3f3f
using namespace std;
ifstream f("bfs.in",fstream::in);
ofstream g("bfs.out",fstream::out);
bool viz[nmax];
long cost[nmax];
struct nod
{int inf;
 nod *urm;
};
typedef int coada[lmax];
coada c;
nod *L[lmax];
unsigned int n,m,sursa;
void add(int x,int y)
{nod *nou;
 nou=new nod;
 nou->inf=x;
 nou->urm=L[y];
 L[y]=nou;
}
void show_noduri()
{short int i;
 nod *p;
  for(i=1;i<=n;i++)
  { cout<<i<<" ";
	  for(p=L[i];p;p=p->urm)
	   cout<<p->inf<<" ";
     cout<<"\n";
  }
}
void citire()
{f>>n>>m>>sursa;
 unsigned int x,y;
 for(unsigned int i=1;i<=m;i++)
 {f>>x>>y;
  add(y,x);
 }
}
void BFS()
{unsigned int incc,sfc; 
 unsigned int x,i;
  x=sursa;
  incc=sfc=1;
  c[incc]=x;
  for(i=1;i<=n;i++)
	  if(i!=sursa)
		  cost[i]=INFINIT;
  while(incc<=sfc)
  {x=c[incc++];
    for(nod *p=L[x];p;p=p->urm)
		 if(!viz[p->inf])
		 {viz[p->inf]=1;
		  c[++sfc]=p->inf;
		  if(cost[x]+1<cost[p->inf])
			  cost[p->inf]=cost[x]+1;
		 }
  }
}
void show_costuri()
{unsigned int i;
 for(i=1;i<=n;i++)
	if(cost[i]==INFINIT)
		g<<"-1 ";
	else g<<cost[i]<<" ";
}
int main()
{citire();
// show_noduri();
 BFS();
 show_costuri();
 f.close();
 g.close();
 return 0;
}