Квесты гильдии: распределить пятерых

тема: Перебор с возвратом · уровень: средний

Условие

В настольной игре про гильдию героев есть 5 персонажей (№1…№5) и 5 квестов (№1…№5). Мастер игры дал таблицу: может ли персонаж i ходить в квест j.

Нужно раздать квесты так, чтобы:

Если вариантов несколько, выведите лексикографически минимальный список из 5 чисел q1 q2 q3 q4 q5, где qi — квест персонажа i.

Формат ввода

5 строк по 5 символов 0 или 1. Символ в строке i и столбце j равен 1, если персонаж i может идти в квест j, и 0 иначе.

Формат вывода

Одна строка: 5 целых чисел q1 q2 q3 q4 q5 (от 1 до 5) — квесты для персонажей 1…5 в лексикографически минимальном допустимом распределении.

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

Пример

Ввод:

11000
10000
00100
00010
00001

Вывод:

2 1 3 4 5

Разберись руками

Есть 5 персонажей и 5 квестов. В каждой строке написано, какие квесты разрешены конкретному персонажу. Нужно раздать всем по одному квесту без повторов и получить самый маленький по лексикографическому порядку список (сначала важнее q1, потом q2 и т.д.).

Идея: Идём по персонажам слева направо и пробуем давать им самый маленький возможный квест. Если из-за выбора кто-то дальше остаётся без вариантов, откатываем этот выбор и пробуем следующий. Как только дошли до конца без конфликтов — это и будет лексикографически минимальный ответ.

Решить задачу с автопроверкой на Python →

Куда дальше