Pagini recente » Cod sursa (job #2283794) | Cod sursa (job #725443) | Cod sursa (job #392572) | Cod sursa (job #2894131) | Cod sursa (job #1493538)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
struct nod
{
int inf;
nod *urm;
}*l[100001];
int m,n,t[100001],d[100001],c[100001],tp,start;
int u[100001];
void adaugnod(nod *&p,int x)
{
nod *c;
c=new nod;
c->inf=x;
c->urm=p;
p=c;
}
void citire()
{
int i;
int x,y;
f>>n>>m>>start;
for (i=1;i<=m;i++)
{
f>>x>>y;
adaugnod(l[x],y);
// adaugnod(l[y],x);
}
f.close();
}
void bf(int start)
{
nod *p;
int inf,st,dr;
st=dr=1;
c[st]=start;
u[start]=1;
while (st<=dr) //coada nevida
{
inf=c[st];
for (p=l[inf];p;p=p->urm)
if (!u[p->inf])
{
c[++dr]=p->inf;
u[p->inf]=1;
d[p->inf]=d[inf]+1; //lungimea drumului minim
t[p->inf]=inf; //tATAL
}
st++; //avansez la inceputul cozii
}
}
int main()
{
int i;
citire();
bf(start);
for (i=1;i<=n;i++)
if (i==start)
g<<0<<" ";
else
if (i!=start && d[i]==0)
g<<-1<<" ";
else
g<<d[i]<<" ";
return 0;
}