Pagini recente » Cod sursa (job #1015574) | Cod sursa (job #1184719) | Cod sursa (job #2960214) | Cod sursa (job #1038115) | Cod sursa (job #372327)
Cod sursa(job #372327)
using namespace std;
#include <fstream>
#include <iostream>
#define MAX 100005
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int *a[MAX], n, S, *d;
void write(){
for(int i=1;i<=n;i++)
fout<<d[i]<<" ";
delete[] d;
}
void bfs(){
//a[i][0] = numarul de urmasi ai lui i
//a[i][j] = un vecin al lui i
int coada[MAX],st=1,dr=1,k,i;
for(int i=1 ; i<=n ; i++)
*(d+i) = -1; // d[i]=-1;
coada[1]=S; d[S]=0;
while(st<=dr){
k = coada[st++];
for(i=1;i<=a[k][0]; ++i)
if(d[a[k][i]]==-1){
d[a[k][i]] = d[k] +1;
coada[++dr] = a[k][i];
}
}
}
void read(){
int m;
fin>>n>>m>>S;
d = new int[n+1];
for(int i=1;i<=n;i++)
d[i] = 0;
int i,j;
for ( ; m ;--m)
{
fin>>i>>j;
d[i]++;
}
fin.close();
fin.open("bfs.in");
fin>>n>>m>>S;
for(i=1;i<=n;i++){
a[i] = new int[d[i]+1];
a[i][0]=0;
}
for( ; m ; --m){
fin>>i>>j;
a[i][++a[i][0]] = j;
}
}
void afis(){
for(int i=1;i<=n;i++){
cout<<i<<" : ";
for(int j =1;j<=a[i][0] ;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
int main(){
read();
//afis();
bfs();
write();
return 0;
}