递归计算板scala上所有可能的位置列表

时间:2017-11-23 16:49:12

标签: scala scala-collections

我正在尝试编写一个方法,该方法使用电路板的路径和尺寸,递归计算可以通过电路板的可能路径的数量,每种情况一次。

为此,我创建了方法:legal_moves(dim:Int,path:Path,x:Pos) 此方法返回一个列表,其中包含尺寸为dim且位于路径中的位置x的所有可能移动。

关于类型的信息:类型Pos =(Int,Int)                 输入Path = List [Pos]

这种方法可以正常工作。

然后我使用以下递归方法计算给定路径中的所有可能的游览:

def count_tours(dim: Int, path : Path) : Int = {

  if (path.length == dim * dim) 1

  val x = for (m <- legal_moves(dim,path,path.head)) yield {

    count_tours(dim,m::path)
  }
  x.sum

}

但由于某些原因,此功能只会返回0

编辑:

输入和输出示例:

让我们说我们有以下3个位置:(0,0)(1,1)(1,2)并且在这种情况下,移动允许我们在他们之间旅行(例如:我们可以从(0,0)到(1,1),也可以从(0,0)到(1,2)等......

我们可以调用count_tours(dim,(0,0)) 我希望输出为2。

为什么?我们从(0,0)(起始路径)开始然后我们做: - &gt; (1,1) - &gt; (1,2)这是一条路 或者我们可以做(0,0) - &gt; (1,2) - &gt; (1,1)这是另一条道路

2条可能的路径,因此输出为2。

0 个答案:

没有答案