Ctrl K

Граф, уложенный в сетку

Сложная
Неориентированный граф с вершинами 0 … node_count - 1 задан списком рёбер links. Гарантируется, что его можно разложить по клеткам прямоугольной таблицы так, чтобы каждая вершина заняла ровно одну клетку, а две вершины стояли в соседних клетках (по горизонтали или вертикали) тогда и только тогда, когда между ними есть ребро. Таких раскладок обычно несколько, поэтому верните одну конкретную — таблицу как список строк: - В левой верхней клетке стоит угловая вершина с наибольшим номером. Угловые — это вершины с наименьшим числом соседей (у цепочки это её концы). - Если у раскладки есть сторона длиной в одну или две клетки, таблица делается именно такой ширины: один или два столбца. - Иначе первая строка идёт от левой верхней вершины в сторону её соседа с меньшим номером. Для таблицы 2 × 2 действуют оба последних правила сразу: два столбца, и правый сосед — меньший.
Пример 1
node_count=6, links=[[0, 1], [0, 3], [1, 2], [1, 4], [2, 5], [3, 4], [4, 5]] → [[5, 2], [4, 1], [3, 0]]

Граф — прямоугольник 2 × 3. Угловые вершины 0, 2, 3, 5, наибольшая из них 5 идёт в левый верхний угол. Одна сторона длиной в две клетки, поэтому столбцов два: первая строка — 5 и соседний угол 2.

Пример 2
node_count=3, links=[[0, 2], [1, 2]] → [[1], [2], [0]]

Граф — цепочка 1–2–0, она укладывается в один столбец, сверху больший из концов, 1.

Пример 3
node_count=9, links=[[0, 4], [0, 6], [0, 8], [1, 6], [1, 7], [1, 8], [2, 4], [2, 5], [2, 8], [3, 5], [3, 7], [3, 8]] → [[7, 1, 6], [3, 8, 0], [5, 2, 4]]

Углы — 4, 5, 6, 7; в левый верхний угол идёт 7. Её соседи 1 и 3, первая строка идёт к меньшему, 1, и дальше вдоль края до угла 6.

Ограничения
  • 2 ≤ node_count ≤ 5 · 10⁴
  • 1 ≤ len(links) ≤ 10⁵
  • links[i] = [u, v], 0 ≤ u < v < node_count
  • Рёбра различны и перечислены по возрастанию пар
  • Граф раскладывается в прямоугольную таблицу
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДорешать судоку СложнаяСамый длинный подъём по карте СложнаяШарик и лунка СложнаяКого вылечить первым СложнаяКого отключить от сети Сложная
загружаем Python…
Вход
node_count=6, links=[[0, 1], [0, 3], [1, 2], [1, 4], [2, 5], [3, 4], [4, 5]]
Ожидается
[[5, 2], [4, 1], [3, 0]]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 9 тестов на сервере, включая скрытые.