Pagini recente » Cod sursa (job #2757710) | Cod sursa (job #1516996) | Cod sursa (job #1705377) | Cod sursa (job #2757722) | Cod sursa (job #1705383)
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <vector>
#include <list>
#include <queue>
void bfs(int N, int init_node, std::vector<std::list<int> > &adj, int *cost) {
// BFS
int curr_node;
long long distance = 0;
bool visited[N + 1];
std::memset(visited, false, N+1);
std::queue<int> q;
// Adaug nodul initial
cost[init_node] = 0;
q.push(init_node);
visited[init_node] = true;
while (!q.empty()) {
curr_node = q.front(); q.pop();
for (std::list<int>::iterator neigh = adj[curr_node].begin(); neigh != adj[curr_node].end(); neigh++) {
if (!visited[*neigh]) {
q.push(*neigh);
visited[*neigh] = true;
cost[*neigh] = cost[curr_node] + 1;
}
}
}
}
int main(int argc, char **argv) {
std::ifstream input("bfs.in");
if (!input.is_open()) {
std::cerr << "Cannot open input file!" << std::endl;
std::exit(-1);
}
std::ofstream output("bfs.out");
if (!output.is_open()) {
std::cerr << "Cannot open output file!" << std::endl;
input.close();
std::exit(-2);
}
// Citire Graph
int N, M, u, v, source_node;
input >> N >> M >> source_node;
std::vector<std::list<int> > adj(N + 1, std::list<int>());
while(input >> u >> v) {
adj[u].push_back(v);
}
int cost[N + 1];
std::memset(cost, -1, sizeof(int) * (N+1));
bfs(N, source_node, adj, cost);
for (int i = 1; i <= N; i++) std::cout << cost[i] << " ";
input.close();
output.close();
return 0;
}