Pagini recente » Cod sursa (job #2101628) | Cod sursa (job #1049397) | Cod sursa (job #2630145) | Cod sursa (job #595640) | Cod sursa (job #2170545)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bfs.in");
ofstream g ("bfs.out");
int n, m, s;
int matriceAdiac[1005][1005];
queue <int> nodCoada;
queue <int> costCoada;
int vizitati[100005];
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;
}