Cod sursa(job #489134)

Utilizator siminescuPaval Cristi Onisim siminescu Data 1 octombrie 2010 12:09:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<fstream>
#include<list>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
# define nmax 100002
list <int> a[nmax];
int cost[nmax],n,m,s,coada[nmax],nod[nmax];
void read()
{
	f>>n>>m>>s;int i,j;
	while(f>>i>>j) a[i].push_back(j);
}
void bfs()
{
	int i=1,j=1,x; memset(cost,-1,sizeof(cost));
	coada[i]=s;cost[s]++;
	while(i<=j)
	{
		while(a[coada[i]].size())
		{
		x=a[coada[i]].front();a[coada[i]].pop_front();
		if(cost[x]==-1){j++; coada[j]=x;}
		if(cost[coada[i]]<cost[x]||cost[x]==-1) cost[x]=cost[coada[i]]+1;
		}
		i++;
	}
}
int main()
{
	read();bfs();int i;
	for(i=1;i<=n;i++) g<<cost[i]<<" ";
}