Я пытаюсь распараллелить модифицированную BFS, но получается ошибка. Моя идея состоит в том, что это ошибка из-за раздела else if, поскольку некоторые потоки могут нежелательно обращаться к нему. Я не могу придумать другого способа это исправить. Может ли кто-нибудь предложить какие-либо изменения?
Это источник оригинального BFS:
https://p.ip.fi/LTLr
Это еще одна ссылка:
https://github.com/cmu15418/assignment3 ... fs/bfs.cpp
void make_bfs_step(int u, int n, vector &frontier, vector &new_frontier, vector &distances, vvi &backedge, vvi &adj, vvi &tree)
{
// vector frontier, new_frontier;
int local_count = 0;
int count = frontier.size();
#pragma omp parallel num_threads(NUM_THREADS)
// shared(new_frontier, par, vis, tree, frontier)
{
vector local_frontier;
int id = omp_get_thread_num();
int nthrds = omp_get_num_threads();
for (int i = id; i < frontier.size(); i += nthrds)
{
int node = frontier;
// std::cout
Подробнее здесь: https://stackoverflow.com/questions/784 ... -using-omp