我最近阅读了图论,尤其是超立方体,并思考了在其上构造路径的有趣方法。这是我想出的。
如您所知,您可以通过将所有由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))
,顶点是否属于超立方体无关紧要,对吧?