Pagini recente » Cod sursa (job #2257982) | Cod sursa (job #389272) | Cod sursa (job #3169597) | Cod sursa (job #2385567) | Cod sursa (job #1316041)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
// algrotimul afla distanta cea mai scurta de la s la toate punctele (inslusiv la sine)
int n,s,matrice [10001][10001],pas,sf,inc,parcurgere [10001],traseu [10001];
long m;
void citire ()
{
int x,y;
f>>n>>m>>s; // n varfuri, m arce , s varful in care trebuie sa se ajunga
long i;
for (i=1;i<=m;i++)
{
f>>x>>y;
matrice [x][y] =1;
}
}
void init ()
{
int i;
for (i=1;i<=sf;i++)
parcurgere [i] = 0;
for (i=1;i<=n;i++)
traseu [i] =0;
}
void bfs (int p)
{
int i;
inc=1;
sf=1;
parcurgere [inc] =s; //
traseu [s] = 1; // memoreaza faptul ca a trecut prin acel puncte deja si ce valoare avea atunci in el
pas =0;
while (inc <=sf )
{
int x=parcurgere [inc];
pas = traseu [x];
pas ++;
for (i=1;i<=n;i++)
if (matrice [x][i])
{
if (i==p)
{
g << pas-1 << " ";
init (); // reface tot la 0
return ;
}
else
if (traseu [i]==0)
{
traseu [i] =pas;
sf++;
parcurgere [sf] = i;
}
}
inc ++;
}
g << -1 << " ";
init (); // reface tot la 0
}
int main()
{
citire ();
int i;
for (i=1;i<s;i++)
bfs (i);
g << 0 << " ";
for (i=s+1;i<=n;i++)
bfs (i);
return 0;
}