Pagini recente » Cod sursa (job #2926924) | Cod sursa (job #2675344) | Cod sursa (job #2553855) | Cod sursa (job #613839) | Cod sursa (job #2218335)
#include <fstream>
using namespace std;
ifstream cin("bfs.in");
ofstream cout("bfs.out");
int n,m,s,i,dr,st;
int que[100005],sol[100005],viz[100005];
struct gr
{
int vecin;
gr *urm;
}*cap[100005];
void add(gr *&hd, int v)
{
if (hd!=NULL)
{
gr *ad=new gr;
ad->vecin=v;
ad->urm=hd;
hd=ad;
}
else
{
hd=new gr;
hd->vecin=v;
hd->urm=NULL;
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
gr *ceva=cap[i];
while(ceva!=NULL)
{
cout<<i<<"->"<<ceva->vecin<<" ";
ceva=ceva->urm;
}
cout<<'\n';
}
}
int main()
{
cin>>n>>m>>s;
for(i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
add(cap[a],b);
}
st=1;
viz[s]=1;
que[++dr]=s;
while(st<=dr)
{
gr *rez=cap[que[st]];
while(rez!=NULL)
{
if(viz[rez->vecin]==0)
{
que[++dr]=rez->vecin;
viz[rez->vecin]=1;
sol[rez->vecin]=sol[que[st]]+1;
}
rez=rez->urm;
}
st++;
}
for(i=1;i<=n;i++)
{
if(sol[i]!=0 || i==s)
cout<<sol[i]<<" ";
else cout<<-1<<" ";
}
return 0;
}