Pagini recente » Cod sursa (job #2848300) | Cod sursa (job #1320574) | Cod sursa (job #1536598) | Cod sursa (job #334654) | Cod sursa (job #1249726)
#include <fstream>
#define DMAX 101
using namespace std;
ofstream fout ("bfs.out");
int C[DMAX];
int n, m, vf_start;
int A[DMAX][DMAX];
int lg[DMAX], prec[DMAX];
void citire(), BFS();
void drum (int a, int b);
int main()
{
int i;
citire();
BFS ();
for (i=1; i<=n; ++i)
drum (vf_start, i);
fout.close();
return 0;
}
void citire()
{
int i, x, y;
ifstream fin ("bfs.in");
fin>>n>>m>>vf_start;
for (i=1; i<=m; ++i)
{
fin>>x>>y;
A[x][++A[x][0]]=y;
}
fin.close();
return;
}
void BFS ()
{
int prim, ultim, p, i;
C[1]=vf_start; lg[vf_start]=1;//l-am vizitat
prim=ultim=1;
while (prim<=ultim)
{
//extrag un element din coada
p=C[prim++];
//vizitez toti vecinii lui p
for (i=1; i<=A[p][0]; ++i)
if (!lg[A[p][i]])
{
lg[A[p][i]]=lg[p]+1;
C[++ultim]=A[p][i];
prec[A[p][i]]=p;
}
}
return;
}
void drum (int a, int b)//afiseaza lantul/drumul minim de la a la b
{
fout<<lg[b]-1<<" ";
}