Pagini recente » Cod sursa (job #1040792) | Monitorul de evaluare | Cod sursa (job #1004772) | Monitorul de evaluare | Cod sursa (job #3333814)
#include <fstream>
#include <vector>
#define NMAX 100001
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
int n, start;
int viz[NMAX], c[NMAX];
int inc, sf;
//vector<int> A; ///declararea unui vector din STL cu 0 elemente de tip int numit A
vector<int> A[NMAX]; ///declararea unui vector cu NMAX elemente cu elemene de tip vector din STL
void citire();
void afisare_matrice_de_adiacenta();
void bfs(int x);
int main()
{
int i;
citire();
//afisare_matrice_de_adiacenta();
bfs(start);
for(i = 1; i <= n; i++)
fout << viz[i] - 1 << ' ';
return 0;
}
void citire()
{
int i, m, x, y;
fin >> n >> m >> start;
for(i = 0; i < m; i++)
{
fin >> x >> y;
///adaug in y in lista de adiacenta a lui x
A[x].push_back(y);
}
}
void bfs(int x) ///barcurg BFS incepand din x
{
int i;
///initializezz coada cu vf de start
c[0] = x;
inc = sf = 0;
///vizitez vf de start
viz[x] = 1;
while(inc <= sf)
{
x = c[inc++];
///parcurg vecinii lui x
for(i = 0; i < A[x].size(); i++)
if(viz[A[x][i]] == 0)
{
viz[A[x][i]] = 1+viz[x];
c[++sf] = A[x][i];
}
}
}
void afisare_matrice_de_adiacenta()
{
int i, j;
for(i = 1; i <= n; i++)
{
for(j = 0; j < A[i].size(); j++)
fout << A[i][j] << ' ';
fout << '\n';
}
}