проблема
Рассмотрим квадрат 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│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘