![如何自动生成如下组合表?](https://linux22.com/image/282197/%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%E5%A6%82%E4%B8%8B%E7%BB%84%E5%90%88%E8%A1%A8%EF%BC%9F.png)
下面显示了X
带有即将指定的约束的可能的表的示例。
\documentclass[preview,border=12pt,12pt]{standalone}
\begin{document}
\begin{tabular}{ccc}
n & a & b\\
a & n & b\\
n & b & a\\ %<====== updated!
a & b & n\\
n & b & a\\
a & b & n\\
n & b & a
\end{tabular}
\end{document}
图片已更新!
约束
- 只有 3 列。
- 只有3个字符
n
,a
和b
。 - 相邻两行不能有
n
同一列的字符。注意第一行和最后一行不被视为相邻两行。更新:对于除第一行之外的每一行, 的位置n
始终位于 下方a
。 n
除第一列之外的字符总数必须始终为 3。n
除第二列之外的字符总数必须始终为 6。n
除第三列之外的字符总数必须始终为 5。
我如何生成X
可能的表格?
答案1
我们可以忽略 a 和 b 之间的区别(因为它们在约束中不起作用),任何可行的布局都会通过交换每行上的 a 和 b 而产生 2^7=128 种变体(如果一行可能有 2 个 a 或 2 个 b,则为 4^7=16384 种变体)
因此有这些可能的行类型(称为 1 2 和 3)
n.. 1
n.. 1
n.. 1
n.. 1
.n. 2
..n 3
..n 3
您需要对该集合进行排列,以便相邻的位置不会出现任何行类型。
如果前三行都用这三种类型,那么剩下的四行就必须用 1113 填充,这是不可能的,所以很容易看出唯一的可能性是
1213131
1312131
1313121
那是
n.. 1
.n. 2
n.. 1
..n 3
n.. 1
..n 3
n.. 1
或者
n.. 1
..n 3
n.. 1
.n. 2
n.. 1
..n 3
n.. 1
或者
n.. 1
..n 3
n.. 1
..n 3
n.. 1
.n. 2
n.. 1
. .
然后,通过用a b
和b a
或a a
、a b
和替换b a
(具体取决于),如果不允许 naa,则每个布局复制 128 次;如果允许 naa,则复制 16384 次b b
。
使用具有附加约束的更新问题,答案与上述相同,只是每个布局只有两个副本而不是 128 个,. .
最后一行a b
或b a
每隔一行由 n 的放置确定,a 由下一行的 n 强制,并且 b 必须进入剩余的插槽(假设未说明的约束是每一行都有 a 和 b)