如何确定一次可以采取(i,j)步骤的“骑士”是否可以覆盖NxN板?

时间:2016-10-13 11:40:03

标签: algorithm graph-algorithm

通常骑士每次移动(1,2)步,即在一个方向上移动一步,在另一个方向上移动两步。在一般版本中,它可以一次移动(i,j)步骤。

我不确定这是否是骑士的旅游问题,因为我不记得一次访问一个广场的限制。此外,答案只是肯定/否定,我们不需要知道实际路径。

我的一个想法主要是将棋盘点像图表一样处理并对所有有效(i,j)移动进行深度优先搜索,并将其标记为已访问。最后,如果有任何未访问的广场,那么这是不可能的。然而,这占用了N ^ 2空间,我想知道是否有更简单的解决方案,因为这是一个是/否的问题。

1 个答案:

答案 0 :(得分:0)

它相当简单。

如果有NxN棋盘和骑士移动a,b,那么:

  1. 如果gcd(a,b)== 1和
  2. 如果可以到达中心**
  3. 奈特可以覆盖整个棋盘。

    **确定是否可以到达中心:

    “设中心方为(x,y)。然后,其中一个点对必须在范围内(1..N,1..N)”

    (x +/- a, y +/- b) and (x +/- b, y +/- a)
    

    基本上是8点,如果骑士在棋盘的中心位置可以移动。