Cod sursa(job #592591)

Utilizator alexnustieinfoalexandru flo alexnustieinfo Data 29 mai 2011 11:48:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb

# include <fstream>
# include <iostream>

using namespace std;

# define MAX 100001

int n, *a[MAX], d[100001], s;

 

void read ()

{

ifstream fin ("bfs.in");

int m;

fin>>n>>m>>s;

int *grad=new int [n+1];

for (int i=1;i<=n;i++)

grad[i]=0, d[i]=-1;

for (;m;m--)

{

int i, j;

fin>>i>>j;

grad[i]++;

}

fin.close ();

fin.open("bfs.in");

fin>>n>>m>>s;

for (int i=1;i<=n;i++)

{

a[i]=new int [grad[i]+1];

a[i][0]=0;

}

delete [] grad;

for (;m;m--)

{

int i, j;

fin>>i>>j;

a[i][++a[i][0]]=j;

}

}

 

void bfs ()

{

int *coada=new int [n+1], st=1, dr=1, k, i;

coada[st]=s;

d[s]=0;

while (st<=dr)

{

k=coada[st++];

for (i=1;i<=a[k][0];i++)

if (d[a[k][i]]==-1)

{

coada[++dr]=a[k][i];

d[a[k][i]]=d[k]+1;

}

}

 

}

 

void write ()

{

ofstream fout ("bfs.out");

for (int i=1;i<=n;i++)

fout<<d[i]<<" ";

}

 

int main ()

{

read ();

bfs ();

write ();

return 0;

}