Pagini recente » Cod sursa (job #841714) | Cod sursa (job #734476) | Cod sursa (job #606784) | Cod sursa (job #2003467) | Cod sursa (job #2426677)
#include<iostream>
#include<fstream>
#include<list>
#include<queue>
using namespace std;
unsigned int n, m, start;
list<unsigned int> listaAdj[100001];
bool viz[100001];
int nivele[100001];
void citire() {
ifstream in("bfs.in");
in >> n >> m >> start;
for (int i = 0; i < m; i++) {
unsigned int x, y;
in >> x >> y;
listaAdj[x].push_back(y);
}
in.close();
}
void bfs(unsigned int x) {
queue<unsigned int> coada;
unsigned int nivel = 0;
coada.push(x);
while (!coada.empty()) {
unsigned int nod = coada.front();
coada.pop();
viz[nod] = true;
for (unsigned int subnod : listaAdj[nod])
if (!viz[subnod]) {
coada.push(subnod);
nivele[subnod] = nivele[nod] + 1;
}
}
}
int main() {
citire();
bfs(start);
ofstream out("bfs.out");
for (unsigned int i = 1; i <= n; i++)
if (nivele[i] == 0 && i != start)
out << -1 << ' ';
else
out << nivele[i] << ' ';
out.close();
return 0;
}