Pagini recente » Cod sursa (job #1578210) | Cod sursa (job #1284700) | Cod sursa (job #2323285) | Cod sursa (job #1063602) | Cod sursa (job #2169266)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bfs.in");
ofstream g ("bfs.out");
int n, m, s;
int matriceAdiac[1000][1000];
queue <int> nodCoada;
queue <int> costCoada;
int vizitati[100000];
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] << ' ';
}
}
}
int main()
{
f >> n >> m >> s;
int prim;
int secund;
for (int i = 1; i <= m; ++i) {
f >> prim;
f >> secund;
matriceAdiac[prim][secund] = 1;
}
bfs();
afisare();
return 0;
}