Pagini recente » Cod sursa (job #446011) | Cod sursa (job #458854) | Cod sursa (job #35361) | Cod sursa (job #131626) | Cod sursa (job #2171192)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bfs.in");
ofstream g ("bfs.out");
int n, m, s;
vector <int> listaVecini[100005];
int matriceAdiac[100][100];
queue <int> nodCoada;
queue <int> costCoada;
int vizitati[100005];
void citire();
void bfs() {
int nodNou;
int costNou;
/// Pun nodul de start in coada, la fel si costul lui
nodCoada.push(s);
costCoada.push(0);
/// Il marchez ca vizitat
vizitati[s] = -2;
cout << "a";
while (!nodCoada.empty()) {
/// Scot primul nod din coada
nodNou = nodCoada.front();
nodCoada.pop();
/// Scot primul cost din coada
costNou = costCoada.front();
costCoada.pop();
/// Iterand prin toate nodurile
for (int i = 1; i <= n; ++i) {
/// Le caut pe cele spre care exista arc pornind de la nodul Curent
if (matriceAdiac[nodNou][i] == 1 && vizitati[i] == 0) {
/// Daca exista, le pun in coada
nodCoada.push(i);
/// Pun si costul in coada
costCoada.push(costNou + 1);
/// Le marchez si ca vizitate, cu costul lor
vizitati[i] = costNou + 1;
}
}
}
}
void afisare() {
for (int i = 1; i <= n; ++i) {
if (vizitati[i] == 0) {
g << -1 << ' ';
}
else if (vizitati[i] == -2) {
g << 0 << ' ';
}
else {
g << vizitati[i] << ' ';
}
}
}
void bfs2() {
int nodCurent;
int costCurent;
nodCoada.push(s);
costCoada.push(0);
vizitati[s] = -2;
while(!nodCoada.empty()) {
nodCurent = nodCoada.front();
costCurent = costCoada.front();
nodCoada.pop();
costCoada.pop();
/// Pentru fiecare nod din lista de vecini
for (int i = 0; i < listaVecini[nodCurent].size(); ++i) {
/// Daca nu e vizitat deja nodul, il punem in coada
if (vizitati[listaVecini[nodCurent][i]] == 0) {
nodCoada.push(listaVecini[nodCurent][i]);
costCoada.push(costCurent + 1);
vizitati[listaVecini[nodCurent][i]] = costCurent + 1;
}
}
}
}
int main()
{
f >> n >> m >> s;
citire();
bfs2();
// bfs();
afisare();
return 0;
}
void citire() {
int prim;
int secund;
/// Citesc toate arcele
for (int i = 1; i <= m; ++i) {
f >> prim;
f >> secund;
/// Adaug fiecarui nod, nodul adiacent, in lista de vecini.
listaVecini[prim].push_back(secund);
}
}