2D空间中的重复排列



给定一组项,比如说,数字1-6。使用这些项目查找排列(准确地说,是不同排列的数量(。每个项目都可以使用一次以上。限制是,两个相邻的项目不应相同。我使用"#"表示可以放置项目的位置。

让我们从1D空间中的一个例子开始。解决方案很简单。第一个位置有6个选择,下一个位置有5个选择。

Q: '###'
A: 6*5*5=150

但我发现,如果我们考虑2D空间中的情况,这会非常困难。在二维空间中,相邻项是位于顶部、底部、左侧或右侧的项。

Q: '##
# '
A: 6*5*5=150

这就像在1D空间中一样。

Q: '##
##'
A: 6*5*(4*4+1*5)=630

事情变得复杂起来。

Q: '###
###'
A: ???
Q: '###
###
###'
A: ???

我无法给出解决方案。


有有效的方法来解决这个问题吗?如果空间扩大到100*100怎么办?

我试图通过一个程序来解决这个问题,一个暴力6^n遍历(n是位置的数量(。还有什么好主意吗?

感谢您的帮助!

这个网站提供了计算排列的数学方法。从那里开始,对它进行编码很简单,但重要的是要注意,排列涉及阶乘,阶乘会很快增长到无法管理的数字。你的100x100的例子可能是不可能的,因为数字会非常可怕。

https://www.mathplanet.com/education/algebra-2/discrete-mathematics-and-probability/permutations-and-combinations

最新更新