ula*_*ade 1 c++ algorithm permutation combinatorics
这就是我的意思:
假设我们有X的颜色数和16个正方形的4×4网格,我们可以用颜色的任何与所述正方形的任何颜色.
假设您可以生成所有可能配置的列表,并且算法一个接一个地吐出(configuration#1然后configuration#2等等),有没有办法使用数字i并立即开始configuration#i?
(因为在普通硬件上无法存储1e + 16配置)
更重要的是,是否有可能得到这个算法的反转,而是给它一个配置,i为什么它将返回一个插回时将返回原始配置?像这样的东西:
int colours[4][4] = GenerateSomeConfig(); // Gets some combination of colours
int i = GetIndex(colours); // This is the main function I was asking about
int colours2[4][4] = GetConfig(i); // This is the reverse of GetIndex()
assert(CompareGridsEqual(colours, colours2)); // This shouldn't break
Run Code Online (Sandbox Code Playgroud)
这些是重复的组合.
无论如何.让我们简单地简化一下问题.我们说我们有10种颜色.编号为0到9.让我们对正方形进行编号,从1到16(或者其他.你说4x4,你的代码说16x16,但这并不重要).
您可以使用框的颜色编号.所以你最终会说:
0 9 6 3
4 7 5 1
0 2 1 7
5 2 3 4
Run Code Online (Sandbox Code Playgroud)
现在你可以使用网格,并使其成为条带 - 0 9 6 3 4 7 5 1 0 2 1 7 5 2 3 4.删除空格,你有你的映射.
要使用不同数量的颜色,请使用不同的基础.不同大小的网格将导致编码数字中的不同位数.
你应该可以从这个提示中脱身.我不会写一个c ++实现来匹配你的努力= P,我认为你应该能够做到这一点.唯一的技术难点是处理任意数量的基数.