我最近阅读了图论,尤其是超立方体,并思考了在其上构造路径的有趣方法。这是我想出的。
如您所知,您可以通过将所有由1和组成的n元组0作为顶点并连接它们(只要它们的位数不同)来构造n维超立方体。如果将这些二进制数字解释为整数,则最终会得到一个顶点编号正确的图形。例如n=3:
假设您想在这个超立方体上散步,然后从顶点开始0。现在,如何确定下一个要访问的顶点?我想出的规则是获取当前a顶点的数量,翻转它mod(a,n)的位(从零开始的索引),然后转到最终的顶点。正式地,该规则可以递归定义为
a[m+1] = xor(a[m], 2^mod(a[m],n)).
通过遵循此规则,您将始终停留在立方体上并沿着边缘移动。结果路径如下所示
如您所见,您将走一圈!实际上,在所有维度和所有起点上,您的路径最终都会成环。例如n=14,a[0]=0它看起来像这样
对于狂热的漫步者来说,他计划的路线长度是至关重要的信息。因此,您的工作是编写将超多维数据集维度n作为起始顶点的函数或程序a[0]作为输入,并在结果循环中输出顶点数。
测试用例
n a[0] Output
-----------------
3 0 6
14 0 50
5 6 8
17 3 346
规则
- 禁止出现标准漏洞
- 输出/输入可以采用任何合适的格式
- 您可以假设
a[0]是有效的顶点
计分
以字节为单位的最短代码获胜。
如果您有关于此主题的其他信息,我们将很高兴听到!
对。如果
—
墨菲
a[m]在超立方体上,a[m+1]也将如此。并且您可以假定a[0]它是一个有效的顶点,因此您几乎不需要关心任何超立方体的东西,只需遵循规则即可。



a[m+1] = xor(a[m], 2^mod(a[m],n)),顶点是否属于超立方体无关紧要,对吧?