Pagini recente » Cod sursa (job #90790) | Cod sursa (job #1548536) | Cod sursa (job #2707539) | Cod sursa (job #1802279) | Cod sursa (job #2610089)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
const int NMAX = 100005;
int dist[NMAX] = {0};
vector < vector <int> > adiacent;
void read(int &n, int &m, int &nod)
{
fin >> n >> m >> nod; int x, y;
adiacent.resize(n + 1);
for(int i = 0; i < m; i++)
{
fin >> x >> y;
adiacent[x].push_back(y);
}
}
void BFS(int noduri, int nod)
{
bool vizitat[NMAX] = {0};
int coada[NMAX] = {0};
int pr, ul;
pr = ul = 1;
coada[pr] = nod;
vizitat[nod] = 1;
for(int i = 1; i <= noduri; i++)
dist[i] = -1;
dist[nod] = 0;
while(pr <= ul && ul < noduri)
{
int curent = coada[pr];
for(unsigned int i = 0; i < adiacent[curent].size(); i++)
{
int vecin = adiacent[curent][i];
if(!vizitat[vecin])
{
coada[++ul] = vecin;
vizitat[vecin] = 1;
dist[vecin] = dist[coada[pr]] + 1;
}
}
pr++;
}
}
void print(int noduri)
{
for(int i = 1; i <= noduri; i++)
fout << dist[i] << ' ';
}
int main()
{
int noduri, muchii, nod;
read(noduri, muchii, nod);
BFS(noduri, nod);
print(noduri);
return 0;
}