Pagini recente » Cod sursa (job #2206514) | Cod sursa (job #2657930) | Cod sursa (job #269312) | Cod sursa (job #1936620) | Cod sursa (job #1336032)
#include <cstdio>
#include <vector>
#define DMAX 100004
using namespace std;
FILE*fin=fopen("bfs.in", "r");
FILE*fout=fopen("bfs.out", "w");
struct coada
{
int vf, dist;
};
int n, m, s;
vector <int> A[DMAX];
vector <coada> C;
int distanta[DMAX];
void citire();
void BFS();
void afisare();
int main()
{
citire();
BFS();
afisare();
return 0;
}
void citire()
{
int i, x, y;
fscanf(fin, "%d %d %d\n", &n, &m, &s);
for(i=1;i<=m;++i)
{
fscanf(fin, "%d %d", &x, &y);
A[x].push_back(y);
}
}
void BFS()
{
coada aux, aux2;
int prim, ultim, vecini, i;
aux.vf=s; aux.dist=0; distanta[s]=-5;
C.push_back(aux);
prim=ultim=0;
while(prim<=ultim)
{
aux=C[prim++];
vecini=A[aux.vf].size();
for(i=0;i<vecini;++i)
if(!distanta[A[aux.vf][i]])
{
aux2.vf=A[aux.vf][i];
aux2.dist=aux.dist+1;
distanta[aux2.vf]=aux2.dist;
C.push_back(aux2);
++ultim;
}
}
distanta[s]=0;
}
void afisare()
{
int i;
for(i=1;i<=n;++i)
if(!distanta[i] && i!=s) fprintf(fout, "-1 ");
else fprintf(fout, "%d ", distanta[i]);
}