【发布时间】:2019-01-14 00:09:10
【问题描述】:
虽然我有一个如下矩阵,但从左上角查找所有路径,直到得到“0”。 'D' 代表底部元素是跟踪的下一步。 “R”代表正确的元素。 'B' 代表底部和右侧元素都是可选的。 'C' 代表右下角的元素。
[['R' 'C' 'D' 'B' 'D' 'C' '0']
['C' 'B' 'C' 'B' 'D' 'D' '0']
['B' 'D' 'B' 'B' 'C' 'D' '0']
['R' 'C' 'B' 'D' 'B' 'C' '0']
['B' 'B' 'R' 'C' 'B' 'D' '0']
['R' 'C' 'B' 'R' 'R' 'C' '0']
['C' 'R' 'C' 'B' 'B' 'B' '0']
['0' '0' '0' '0' '0' '0' '0']]
在这种情况下,有两条路径满足要求,分别是
(0, 0)R(0, 1)C(1, 2)C(2, 3)B(2, 4)C(3, 5)C(4, 6)0
(0, 0)R(0, 1)C(1, 2)C(2, 3)B(3, 3)D(4, 3)C(5, 4)R(5, 5)C(6, 6)0
我尝试使用递归函数来查找这两条路径中的所有“C”, 由于 (2, 3)B 中存在 fork,因此该函数仅在joint 之后完全返回其中一条路径。
(5, 5)C(4, 3)C
(3, 5)C(2, 4)C(1, 2)C(0, 1)C
那么我怎样才能修改我的代码以获得完整的结果呢?
def printC(matrix, i=0, j=0):
if matrix[i][j] == '0':
print()
return None
elif matrix[i][j] == 'B':
printC(matrix, i+1, j)
printC(matrix, i, j+1)
elif matrix[i][j] == 'D':
printC(matrix, i+1, j)
elif matrix[i][j] == 'R':
printC(matrix, i, j+1)
elif matrix[i][j] == 'C':
printC(matrix, i+1, j+1)
print((i,j), end='')
print(matrix[i][j], end='')
printC(matrix)
print()
谢谢
【问题讨论】:
-
是否需要递归解决方案?我的是迭代的。
标签: python algorithm recursion