Pagini recente » Cod sursa (job #2335656) | Cod sursa (job #441096) | Cod sursa (job #765129) | Cod sursa (job #1764317) | Cod sursa (job #1814348)
#include <iostream>
#include <fstream>
#define Nmax 100001
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
struct nod
{
int info;
nod *urm;
};
nod *a[Nmax];
int n,m,S,viz[Nmax];
void ADD (int x,nod *&p)
{
nod *q=new nod;
q->info=x;
q->urm=p;
p=q;
}
void Citire ()
{int x,y,i;
fin>>n>>m>>S;
for(i=1;i<=m;i++)
{
fin>>x>>y;
ADD(y,a[x]);
}
}
int cost[Nmax];
void BFS(int x)
{
int cl[Nmax],pr,ul,z;
nod *p;
viz[x]=1;
cl[1]=x;
pr=ul=1;
cost[x]=0;
while (pr<=ul)
{
z=cl[pr];pr++;
for (p=a[z];p!=NULL;p=p->urm)
if (viz[p->info]==0)
{
ul++;
cl[ul]=p->info;
viz[p->info]=1;
cost[p->info]=cost[z]+1;
}
}
}
int main()
{int i;
nod *p;
Citire();
BFS(S);
for (i=1;i<=n;i++)
if (viz[i]==0)
cost[i]=-1;
for(i=1;i<=n;i++)
fout<<cost[i]<<" ";
return 0;
}