проблема
Рассмотрим квадрат 3 на 3 сетки неотрицательных целых чисел. Для каждой строки i
сумма целых чисел устанавливается равной r_i
. Аналогично для каждого столбца j
сумма целых чисел в этом столбце устанавливается равной c_j
.
Задача состоит в том, чтобы написать код для перечисления всех возможных различных назначений целых чисел в сетке с учетом ограничений суммы строк и столбцов. Ваш код должен выводить одно назначение за раз.
вход
Ваш код должен принимать 3 неотрицательных целых числа, указывающих ограничения строки, и 3 неотрицательных целых числа, указывающих ограничения столбца. Вы можете предположить, что они действительны, то есть, что сумма или ограничения строки равны сумме ограничений столбца. Ваш код может сделать это любым удобным для вас способом.
Выход
Ваш код должен выводить различные 2d сетки, которые он вычисляет, в любом удобочитаемом формате по вашему выбору. Чем красивее, тем лучше, конечно. Вывод не должен содержать дублирующихся сеток.
пример
Если все ограничения строки и столбца точно, 1
то есть только 6
разные возможности. Для первой строки вы можете поместить 1
любой из первых трех столбцов, для второй строки теперь есть 2
альтернативы, и последняя строка теперь полностью определяется двумя предыдущими. Все остальное в сетке должно быть установлено на 0
.
Скажем, ввод 2 1 0
для строк и 1 1 1
столбцов. Используя прекрасный выходной формат APL, возможные целые сетки:
┌─────┬─────┬─────┐
│0 1 1│1 0 1│1 1 0│
│1 0 0│0 1 0│0 0 1│
│0 0 0│0 0 0│0 0 0│
└─────┴─────┴─────┘
Теперь скажите, что ввод 1 2 3
для строк и 3 2 1
столбцов. Возможные целочисленные сетки:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 1│0 0 1│0 0 1│0 1 0│0 1 0│0 1 0│0 1 0│1 0 0│1 0 0│1 0 0│1 0 0│1 0 0│
│0 2 0│1 1 0│2 0 0│0 1 1│1 0 1│1 1 0│2 0 0│0 1 1│0 2 0│1 0 1│1 1 0│2 0 0│
│3 0 0│2 1 0│1 2 0│3 0 0│2 1 0│2 0 1│1 1 1│2 1 0│2 0 1│1 2 0│1 1 1│0 2 1│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘