Pagini recente » Cod sursa (job #2130996) | Cod sursa (job #1434169) | Cod sursa (job #1113571) | Cod sursa (job #2133412) | Cod sursa (job #2322809)
#include <bits/stdc++.h>
//N < 100 000
//M < 1 000 000
using namespace std;
ifstream f ("bfs.in");
ofstream g ("bfs.out");
queue <int> coada;
vector <int> adj[100005];
int cost[100005];
int n, m, s;
void citire();
void afisare_lista();
void bfs(int s) {
int nod;
// Adauga primul nod in coada
coada.push(s);
cost[s] = 1;
while (!coada.empty()) {
// Scoate un nod din coada.
nod = coada.front();
coada.pop();
// cout << "nod_curent: " << nod << '\n';
for (int i = 0; i < adj[nod].size(); ++i) {
// cout << "vecin: " << adj[nod][i];
// Daca nu s-a mai trecut prin nodul curent
if (cost[adj[nod][i]] == 0) {
// In vectorul de costuri pune costul vecinului drept costul nodului curent
// plus 1
cost[adj[nod][i]] = cost[nod] + 1;
// Adauga toti vecinii in coada
coada.push(adj[nod][i]);
// cout << " MARCAT: " << cost[adj[nod][i]];
}
// cout << '\n';
}
// cout << '\n';
}
}
void afisare_rezultat() {
for (int i = 1; i <= n; ++i) {
if (cost[i] == 0)
g << -1 << ' ';
else
g << cost[i] - 1<< ' ';
}
}
int main()
{
citire();
bfs(s);
afisare_rezultat();
return 0;
}
void citire() {
int u, v;
f >> n >> m;
f >> s;
for (int i = 0; i < m; ++i) {
f >> u >> v;
if (u != v) {
adj[u].push_back(v);
}
}
}
void afisare_lista() {
for (int i = 1; i <= n; ++i) {
for (int j = 0; j < adj[i].size(); ++j) {
g << adj[i][j]<< ' ';
}
g << '\n';
}
}