问题
考虑非负整数的3×3正方形网格。对于每一行i
,整数的总和设置为r_i
。同样,对于每一列j
,该列中的整数总和设置为c_j
。
任务是编写代码,以在给定行和列总和约束的情况下枚举所有可能的不同整数分配给网格。您的代码应该一次输出一个分配。
输入项
您的代码应使用3个非负整数指定行约束,并使用3个非负整数指定列约束。您可以假设它们是有效的,即,总和或行约束等于列约束之和。您的代码可以通过任何方便的方式执行此操作。
输出量
您的代码应以您选择的任何人类可读格式输出其计算的不同2D网格。当然,越漂亮越好。输出中不得包含重复的网格。
例
如果所有行和列约束都完全相同1
,则只有6
不同的可能性。对于第一行,您可以1
在前三列中的任何一列中输入a,对于第二行,现在有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│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘