Контест Senior Паттерны конкурентности обновлено

Параллельный 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.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.