回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图通过一个2D矩阵的所有可能的路径(条件是我只能向下或向右)。
以下是我正在尝试的:</p>
<pre><code>rows = 3
columns = 3
# Class definition for node of the tree
class Node(object):
def __init__(self):
self.location = None
# Starting the tree
tree = Node()
tree.location = [0,0]
def generateRestOfThePath(node):
print 'Receiving node'
print node.location
if (node.location[0] >= rows) or (node.location[1] >= columns):
print 'Out of playground', node.location
elif node.location == [rows-1, columns -1]:
print 'End of a path'
elif node.location[0] == rows-1:
node.location[1] += 1
print 'Reached bottom can only go right', node.location
generateRestOfThePath(node)
elif node.location[1] == columns -1:
node.location[0] += 1
print 'Reached right can only go down', node.location
generateRestOfThePath(node)
else:
print 'Neither reached down nor right'
node.location[0] += 1
print 'Going down', node.location
generateRestOfThePath(node)
print 'Finished with down', node.location
node.location[1] +=1
print 'Going Right', node.location
generateRestOfThePath(node)
generateRestOfThePath(tree)
</code></pre>
<p>我得到的结果是:</p>
<pre><code>Receiving node
[0, 0]
Neither reached down nor right
Going down [1, 0]
Receiving node
[1, 0]
Neither reached down nor right
Going down [2, 0]
Receiving node
[2, 0]
Reached bottom can only go right [2, 1]
Receiving node
[2, 1]
Reached bottom can only go right [2, 2]
Receiving node
[2, 2]
End of a path
Finished with down [2, 2]
Going Right [2, 3]
Receiving node
[2, 3]
Out of playground [2, 3]
Finished with down [2, 3]
Going Right [2, 4]
Receiving node
[2, 4]
Out of playground [2, 4]
</code></pre>
<p>我的问题是:</p>
<pre><code>Finished with down [2, 2]
</code></pre>
<p>这不是<code>[1, 0]</code>吗?你知道吗</p>
<p>我在想:</p>
<pre><code>0,0
| \ else case
| 1,0 First recursion call
| | \else case
| | 2,0 First recursion call
| | | only go right case
| | 2,1 First and only recursive call
| | | only go right case
| | 2,2 First and only recursive call
| | | End of path, No Recursion here
| | / Since there is no recursion, the second recursion should be called (this is what I am thinking)
| 1,0 Second recursion call
| .........
| .........
|/
</code></pre>
<p>但这并没有发生。有人请给我指出正确的方向。你知道吗</p>
<p>更新:</p>
<P>我认为,不像C或C++ Python,它不把值1,0保存在内存中,实际上只为一个节点实例使用一个内存位置。我认为它们是不同的实例,但根据python,它们都是相同的实例。所以我认为真正的问题是。如何拥有不同的节点实例而不是一个共享的节点实例?你知道吗</p>