Путь через квадрат с круглыми препятствиями

HardАлгоритмы
08:00
Лучше работает на десктопе
GeometryGraphUnion FindDFS
Реальный собес00:03:43-00:38:192026-02-13 13-31-39.m4aСтраница собеса

Дан единичный квадрат с координатами от (0, 0) до (1, 1).

Внутри или около квадрата расположены круги-препятствия. Каждый круг задан как [x, y, r]: центр и радиус.

Нужно определить, существует ли путь из любой точки левой стороны квадрата в любую точку правой стороны квадрата.

Ограничения:

- нельзя заходить внутрь кругов;
- нельзя касаться кругов;
- нельзя выходить за пределы квадрата;
- касание кругов друг с другом или с границей считается блокировкой.

Сигнатура

def can_cross_square(circles: list[list[float]]) -> bool:

Идея

Путь слева направо невозможен, если круги образуют непрерывный барьер от верхней стороны квадрата до нижней стороны квадрата.

Примеры

Пример 1

Вход:
circles = []
Выход:true

Без препятствий путь существует

Пример 2

Вход:
circles = [[0.5,0.5,0.1]]
Выход:true

Один небольшой круг не режет квадрат

Пример 3

Вход:
circles = [[0.5,0.5,0.5]]
Выход:false

Круг касается top и bottom

Консоль
Нажмите Run или Ctrl+Enter для запуска