Pagini recente » Cod sursa (job #1984545) | Cod sursa (job #1384935) | Cod sursa (job #763998) | Cod sursa (job #279517) | Cod sursa (job #2246364)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100001
#define INF 10000000
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
class Graph {
private:
vector<int> m_G[NMAX];
int m_edges;
int m_nodes;
int source;
public:
Graph() {
f >> m_nodes >> m_edges >> source;
for (int i = 1; i <= m_edges; i++) {
int source, dest;
f >> source >> dest;
m_G[source].push_back(dest);
}
}
void BFS_Traversal() {
queue<int> Q;
int dist[NMAX];
for (int i = 1; i <= m_nodes; i++) {
dist[i] = INF;
}
bool mark[NMAX] = {0};
Q.push(source);
dist[source] = 0;
mark[source] = true;
while (!Q.empty()) {
int crt_node = Q.front();
Q.pop();
for (const auto neighbour : m_G[crt_node]) {
if (!mark[neighbour]) {
dist[neighbour] = dist[crt_node] + 1;
mark[neighbour] = true;
Q.push(neighbour);
}
}
}
for (int i = 1; i <= m_nodes; i++) {
if (dist[i] == INF) {
g << -1 << ' ';
}
else {
g << dist[i] << ' ';
}
}
}
};
int main() {
Graph *my_graph = new Graph();
my_graph->BFS_Traversal();
}