我正在尝试编写一个方法,该方法使用电路板的路径和尺寸,递归计算可以通过电路板的可能路径的数量,每种情况一次。
为此,我创建了方法: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。