Cod sursa(job #341702)

Utilizator bog29Antohi Bogdan bog29 Data 19 august 2009 12:46:23
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
#include<stdlib.h>
#define dmax 100003
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
bool viz[dmax];
int n,m,s,c[dmax],dm[dmax];
int* dr[dmax];
void bfs()
{	int p1=1,p2=1,i;
	c[p1]=s;
	dm[s]=0;
	viz[s]=1;
	while(p1<=p2)
	{	for(i=1;i<=dr[c[p1]][0];i++)
		{	if(viz[dr[c[p1]][i]]==0)
			{	viz[dr[c[p1]][i]]=1;
				p2++;
				c[p2]=dr[c[p1]][i];
				dm[c[p2]]=dm[c[p1]]+1;
			}
		}	
		p1++;
	}	
}
int main()
{	int i,x,y;
	in>>n>>m>>s;
	for(i=1;i<=n;i++)
	{	dr[i]=(int*)realloc(dr[i],sizeof(int));
		dr[i][0]=0;
	}
	for(i=1;i<=m;i++)
	{	in>>x>>y;
		dr[x][0]++;;
		dr[x]=(int*)realloc(dr[x],(dr[x][0]+1)*sizeof(int));
		dr[x][dr[x][0]]=y;
	}
	in.close();
	for(i=1;i<=n;i++)
		dm[i]=-1;
	bfs();
	for(i=1;i<=n;i++)
		out<<dm[i]<<" ";
	out.close();
	return 0;
}