Pagini recente » Cod sursa (job #2310321) | Cod sursa (job #1232512) | Cod sursa (job #2356380) | Cod sursa (job #1782426) | Cod sursa (job #255809)
Cod sursa(job #255809)
#include<fstream>
#include<iostream>
#define b 100010
using namespace std;
int d[b],n,m,s,*a[b];
ofstream out ("bfs.out");
void citire ()
{
ifstream in ("bfs.in");
int x,y;
in>>n>>m>>s;
while (m--)
{
in>>x>>y;
d[x]++;
}
in.close ();
for(int i=1;i<=n;i++)
{
a[i]=new int[1+d[i]];
a[i][0]=0;
}
ifstream in2("bfs.in");
in2>>n>>m>>s;
while (m--)
{
in2>>x>>y;
a[x][++a[x][0]]=y;
}
in2.close ();
}
/*
void verificare ()
{
for(int i=1;i<=n;i++)
{
cout<<"vecinii lui "<<i<<": ";
for(int j=1;j<=a[i][0];j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
*/
void bfs (int x0)
{
int p=0,u=0,i,x,y,coada[b],pred[b];
for(i=1;i<=n;i++)
d[i]=-1;
coada[u++]=x0;
d[x0]=0;
pred[x0]=0;
while(p!=u)
{
x=coada[p++];
for(i=1;i<=a[x][0];i++)
{
y=a[x][i];
if(d[y]==-1)
{
coada[u++]=y;
d[y]=1+d[x];
pred[y]=x;
}
}
}
}
void afisare ()
{
for(int i=1;i<=n;i++)
out<<d[i]<<" ";
}
int main ()
{
citire ();
//verificare();
bfs (s);
afisare ();
out.close ();
return 0;
}