Pagini recente » Cod sursa (job #2478466) | Clasament | Statistici Bresug Bogdan Ciprian (casteurr2) | Cod sursa (job #1865731) | Cod sursa (job #3157259)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <queue>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
void bfs (int S, int N, vector<list<int>> adjacencyList) {
int startNode = S;
vector <bool> visited((N + 1), false);
vector <int> distance((N + 1), 0);
queue <int> queue;
visited[startNode] = true;
queue.push(startNode);
while (!queue.empty()) {
startNode = queue.front();
queue.pop();
for (const int neighbor : adjacencyList[startNode]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
queue.push(neighbor);
distance[neighbor] = distance[startNode] + 1;
}
}
}
for (int i = 1; i <= N; i++) {
if (i != S & distance[i] == 0)
distance[i] = -1;
fout << distance[i] << " ";
}
}
vector<list<int>> from_edges_to_list (int n, list<pair<int, int>> edges) {
vector<list<int>> adjacencyList;
adjacencyList.resize(n + 1);
for (auto p : edges) {
adjacencyList[p.first].push_back(p.second);
}
return adjacencyList;
}
int main() {
int N, M, S;
list <pair <int, int>> edges;
fin >> N >> M >> S;
for (int i = 0; i < M; i++) {
int x, y;
fin >> x >> y;
edges.push_back(make_pair(x, y));
}
// creez lista de adiacenta
vector<list <int>> adjacencyList = from_edges_to_list(N, edges);
bfs(S, N, adjacencyList);
}