Параллельный BFS по уровням на горутинах
Условие
Найдите расстояния от вершины 1 до всех вершин неориентированного графа. BFS идёт по уровням: вершины текущего фронта делятся между w горутинами, каждая просматривает соседей своих вершин и предлагает непосещённые в следующий фронт. Вершина должна попасть в следующий фронт ровно один раз.
Ввод: n m w (1 ≤ n ≤ 3000, 0 ≤ m ≤ 4000, 1 ≤ w ≤ 16), затем m рёбер.
Вывод: n расстояний через пробел (−1 для недостижимых).
Решение должно быть конкурентным (горутины), а вывод не должен зависеть от порядка их выполнения.
Пример
5 4 2
1 2
1 3
3 4
2 4
0 1 1 2 -1
Как подойти
Барьер между уровнями, CAS на visited, локальные фронты горутин, слияние после wg.Wait.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
MapReduce подсчёта слов на горутинах и каналах
Следующий вопрос
Параллельное хеширование строк SHA-256: fan-out и fan-in