0

我试图弄清楚如何终止我的递归函数。如下图所示:

在此处输入图像描述

getEmpty[9]将返回:

[6,10]

但我需要它返回[6,8,9,10,11]

因为我想要所有的空盒子,只要它与之前的空盒子共享一条边。

如何终止此递归?

目前我有

getEmpty(9)
        #my code here
        return empties;


empties = [6,10]

我添加了这个:

for cell in empties:

        if(getEmpty(cell) not in empties):
            empties = empties+getEmpty(cell)

最后,但它给了我一个打印出来的无限循环:

[6,10]
[9]

不停,我该如何解决这个问题?

4

2 回答 2

4

编辑:对不起,你的问题很模棱两可。你需要的是一个简单的图遍历算法。这里是它的一瞥:

input : coordinate of a cell

function empty_cell_search(cell)
  for neighbor_cell in neighbors :
    if the_neighbor_cell is empty and is not already visited : 
      add the_neighbor_cell to set of visited cells
      union empty_cell_search(the_neighbor_cell) with current set of visited cells
  return the set of currently visited cells
于 2013-03-07T00:42:58.190 回答
1

您应该使用它(python 3,但 2 的想法相同):

empty=[6,8,9,10,11]
start=9
done=[int(start)]
while True:
    complete=True
    for num0 in empty:
        for num1 in done:
            if (abs(num0-num1)==1 or abs(num1-num0)==3) and num0 not in done:
                complete=False
                done.append(num0)
    if complete=True:
         break
print(sorted(done))
于 2013-03-07T00:47:46.740 回答