Pagini recente » Cod sursa (job #2092243) | Cod sursa (job #1653914) | Cod sursa (job #2617350) | Cod sursa (job #683891) | Cod sursa (job #2782453)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
class Graf {
public:
void DFS(int nod, vector<bool> &viz) {
viz[nod] = true;
for (auto &x : m_ad[nod]) {
if (!viz[x]) {
DFS(x, viz);
}
}
}
int CompConexe() {
int nrComp = 0;
vector<bool> viz(m_n, false);
for (int i = 1; i <= m_n; ++i) {
if (!viz[i]) {
++nrComp;
DFS(i, viz);
}
}
return nrComp;
}
void minDist(int start) {
vector<int> dist(m_n + 1, -1);
queue<int> Q;
int x;
dist[start] = 0;
Q.push(start);
while (!Q.empty()) {
x = Q.front(); Q.pop();
for (auto &y : m_ad[x]) {
if (dist[y] == -1) {
dist[y] = dist[x] + 1;
Q.push(y);
}
}
}
for (int i = 1; i <= m_n; ++i) {
fout << dist[i] << ' ';
}
}
Graf(int n, vector<vector<int>> &ad) : m_n(n), m_ad(ad) {}
private:
int m_n;
vector<vector<int>> m_ad;
};
int main() {
int n, m, s, x, y;
fin >> n >> m >> s;
vector<vector<int>> ad(n + 1);
for (int i = 1; i <= m; ++i) {
fin >> x >> y;
ad[x].push_back(y);
// ad[y].push_back(x);
}
Graf G(n, ad);
G.minDist(s);
return 0;
}