Pagini recente » Cod sursa (job #1345182) | Cod sursa (job #953294) | Cod sursa (job #2941942) | Cod sursa (job #1037615) | Cod sursa (job #2576884)
#include <iostream>
#include <iomanip>
#include <vector>
#include <queue>
#include <fstream>
#include <algorithm>
using std::cout;
using std::endl;
using std::cin;
using std::sort;
using std::queue;
using std::vector;
using std::setprecision;
using std::ios;
using std::fstream;
fstream file1("bfs.in", ios::in);
fstream file2("bfs.out", ios::out);
int n, m, s, d[100005];
vector<int> vecini[100005];
vector<bool> vizitat(100005);
queue<int> coada;
void formeaza_vecini();
void bfs(int start);
int main(int argc, char** argv) {
file1 >> n >> m >> s;
formeaza_vecini();
for (int i{ 1 }; i <= n; i++) {
d[i] = -1;
}
bfs(s);
for (int i{ 1 }; i <= n; i++) {
file2 << d[i] << ' ';
}
file1.close();
file2.close();
return 0;
}
void bfs(int start) {
d[start] = 0;
vizitat[start] = true;
coada.push(start);
while (!coada.empty()) {
int nod = coada.front();
coada.pop();
for (int i{ 0 }; i < vecini[nod].size(); i++) {
if (!vizitat[vecini[nod][i]]) {
vizitat[vecini[nod][i]] = true;
coada.push(vecini[nod][i]);
d[vecini[nod][i]] = 1 + d[nod];
}
}
}
}
void formeaza_vecini() {
int i, j;
while (file1 >> i >> j){
vecini[i].push_back(j);
}
}