Mai intai trebuie sa te autentifici.
Cod sursa(job #3154766)
Utilizator | Data | 6 octombrie 2023 02:08:05 | |
---|---|---|---|
Problema | BFS - Parcurgere in latime | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.89 kb |
#include <iostream>
#include <vector>
#include <queue>
#include <list>
#include <utility>
#include <algorithm>
#include <fstream>
// void edgeList(int n, int m, std::list<std::pair<int, int>>& E){
// int x, y;
// while (fin >> x >> y){
// E.push_back(std::make_pair(x, y));
// }
// }
void BFS(int n, int m, int s, std::vector<std::vector<int>> v){
std::queue<int> q;
q.push(s);
std::vector<int> visited(n + 1, 0);
visited[s] = 1;
std::vector<int> road;
road.resize(n + 1);
road[0] = s;
int cnt = 1;
std::vector<int> distance;
distance.resize(m);
distance[s] = 0;
// 1 0 0 0 1 0 0 1 1 0
for (auto x : road){
for (const auto& next : v[x]){
if (visited[next] == 0){
q.push(next);
visited[next] = 1;
road[cnt++] = next;
distance[next] = distance[x] + 1;
}
}
}
// while (!q.empty()){
// std::cout << q.front() << ' ';
// q.pop();
// }
for (int i = 1; i < n + 1; ++i){
bool ok = true;
std::queue<int> tempQ = q;
while(!tempQ.empty()){
if (tempQ.front() == i)
ok = false;
tempQ.pop();
}
if (ok)
distance[i] = -1;
}
std::cout << std::endl;
for (int i = 1 ; i <= n; ++i)
fout << distance[i] << ' ';
}
std::ifstream fin("BFS.in");
std::ofstream fout("BFS.out");
int main(){
int n, m, s, x, y;
fin >> n >> m >> s;
std::vector<std::vector<int>> v;
v.resize(m);
while (fin >> x >> y) {
v[x].push_back(y);
}
BFS(n, m, s, v);
// for (int i = 0; i < v.size(); ++i, std::cout << '\n')
// for (int j = 0; j < v[i].size(); ++j)
// std::cout << v[i][j] << ' ';
return 0;
}