尝试从 P 矩阵打印最短路径
Trying to print shortest path from P matrix
我正在尝试使用此算法从路径矩阵 P 中打印出最短路径。
我的实现:
testmatrix=np.matrix('0,7,7,0,7,7,0,0,7;0,0,7,0,7,9,0,1,0;9,0,0,0,7,0,2,9,6;9,8,8,0,8,8,8,0,8;9,3,0,0,0,3,3,9,6;9,9,9,0,9,0,9,9,0;9,5,5,0,0,5,0,9,6;9,7,7,0,7,7,0,0,7;0,7,7,0,7,0,1,1,0')
def path(q,r):
if (testmatrix[q,r] !=0):
path(q,testmatrix[q,r])
print("v "+str(testmatrix[q,r]))
path(testmatrix[q,r],r)
当我调用它打印 v7 到 v8 的最短路径时:
path(7,8)
我得到一个打印出来的错误:
v 7
v 7
v 7
.
.
.
v 7
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-41-72a35ae59934> in <module>()
----> 1 path(7,8)
<ipython-input-40-7b3409c28cd1> in path(q, r)
3 path(q,testmatrix[q,r])
4 print("v "+str(testmatrix[q,r]))
----> 5 path(testmatrix[q,r],r)
6
... last 1 frames repeated, from the frame below ...
<ipython-input-40-7b3409c28cd1> in path(q, r)
3 path(q,testmatrix[q,r])
4 print("v "+str(testmatrix[q,r]))
----> 5 path(testmatrix[q,r],r)
6
RuntimeError: maximum recursion depth exceeded while calling a Python object
我不知道我是否在 Python 中达到了某个递归限制,或者我的实现是否(很可能)有问题。但老实说,我无法弄清楚我做错了什么。如果有人可以为我提供一些指导来解决这个问题,我将非常感激。
您的 0 权重与 python 的 0 索引冲突,因为您的索引是从 1 到 9 而不是 0 到 8。您可以通过从矩阵中减去 1 并将 -1 视为权重来解决此问题0 并切换到 python 索引世界。
matrix([[-1, 6, 6, -1, 6, 6, -1, -1, 6],
[-1, -1, 6, -1, 6, 8, -1, 0, -1],
[ 8, -1, -1, -1, 6, -1, 1, 8, 5],
[ 8, 7, 7, -1, 7, 7, 7, -1, 7],
[ 8, 2, -1, -1, -1, 2, 2, 8, 5],
[ 8, 8, 8, -1, 8, -1, 8, 8, -1],
[ 8, 4, 4, -1, -1, 4, -1, 8, 5],
[ 8, 6, 6, -1, 6, 6, -1, -1, 6],
[-1, 6, 6, -1, 6, -1, 0, 0, -1]])
现在索引从 0 到 8。如果元素为 -1,则表示它是最短路径。
代码:
import numpy as np
testmatrix=np.matrix('0,7,7,0,7,7,0,0,7;0,0,7,0,7,9,0,1,0;9,0,0,0,7,0,2,9,6;9,8,8,0,8,8,8,0,8;9,3,0,0,0,3,3,9,6;9,9,9,0,9,0,9,9,0;9,5,5,0,0,5,0,9,6;9,7,7,0,7,7,0,0,7;0,7,7,0,7,0,1,1,0')
testmatrix = testmatrix -1
def path(q,r):
if (testmatrix[q,r] !=-1):
path(q,testmatrix[q,r])
print("v "+str(testmatrix[q,r]))
path(testmatrix[q,r],r)
path(6,7)
结果:
v 4
v 2
v 5
v 8
v 0
或者如果你真的坚持使用 1-9 索引,你可以将 path
放入 newpath
并在那里完成工作:
import numpy as np
testmatrix=np.matrix('0,7,7,0,7,7,0,0,7;0,0,7,0,7,9,0,1,0;9,0,0,0,7,0,2,9,6;9,8,8,0,8,8,8,0,8;9,3,0,0,0,3,3,9,6;9,9,9,0,9,0,9,9,0;9,5,5,0,0,5,0,9,6;9,7,7,0,7,7,0,0,7;0,7,7,0,7,0,1,1,0')
def new_path (q1,r1,testmatrix):
def path(q,r):
if (testmatrix[q,r] !=-1):
path(q,testmatrix[q,r])
print("v "+str(testmatrix[q,r]+1))
path(testmatrix[q,r],r)
testmatrix = testmatrix-1
q = q1-1
r = r1-1
path(q,r)
new_path(7,8,testmatrix)
结果:
v 5
v 3
v 6
v 9
v 1
我正在尝试使用此算法从路径矩阵 P 中打印出最短路径。
我的实现:
testmatrix=np.matrix('0,7,7,0,7,7,0,0,7;0,0,7,0,7,9,0,1,0;9,0,0,0,7,0,2,9,6;9,8,8,0,8,8,8,0,8;9,3,0,0,0,3,3,9,6;9,9,9,0,9,0,9,9,0;9,5,5,0,0,5,0,9,6;9,7,7,0,7,7,0,0,7;0,7,7,0,7,0,1,1,0')
def path(q,r):
if (testmatrix[q,r] !=0):
path(q,testmatrix[q,r])
print("v "+str(testmatrix[q,r]))
path(testmatrix[q,r],r)
当我调用它打印 v7 到 v8 的最短路径时:
path(7,8)
我得到一个打印出来的错误:
v 7
v 7
v 7
.
.
.
v 7
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-41-72a35ae59934> in <module>()
----> 1 path(7,8)
<ipython-input-40-7b3409c28cd1> in path(q, r)
3 path(q,testmatrix[q,r])
4 print("v "+str(testmatrix[q,r]))
----> 5 path(testmatrix[q,r],r)
6
... last 1 frames repeated, from the frame below ...
<ipython-input-40-7b3409c28cd1> in path(q, r)
3 path(q,testmatrix[q,r])
4 print("v "+str(testmatrix[q,r]))
----> 5 path(testmatrix[q,r],r)
6
RuntimeError: maximum recursion depth exceeded while calling a Python object
我不知道我是否在 Python 中达到了某个递归限制,或者我的实现是否(很可能)有问题。但老实说,我无法弄清楚我做错了什么。如果有人可以为我提供一些指导来解决这个问题,我将非常感激。
您的 0 权重与 python 的 0 索引冲突,因为您的索引是从 1 到 9 而不是 0 到 8。您可以通过从矩阵中减去 1 并将 -1 视为权重来解决此问题0 并切换到 python 索引世界。
matrix([[-1, 6, 6, -1, 6, 6, -1, -1, 6],
[-1, -1, 6, -1, 6, 8, -1, 0, -1],
[ 8, -1, -1, -1, 6, -1, 1, 8, 5],
[ 8, 7, 7, -1, 7, 7, 7, -1, 7],
[ 8, 2, -1, -1, -1, 2, 2, 8, 5],
[ 8, 8, 8, -1, 8, -1, 8, 8, -1],
[ 8, 4, 4, -1, -1, 4, -1, 8, 5],
[ 8, 6, 6, -1, 6, 6, -1, -1, 6],
[-1, 6, 6, -1, 6, -1, 0, 0, -1]])
现在索引从 0 到 8。如果元素为 -1,则表示它是最短路径。
代码:
import numpy as np
testmatrix=np.matrix('0,7,7,0,7,7,0,0,7;0,0,7,0,7,9,0,1,0;9,0,0,0,7,0,2,9,6;9,8,8,0,8,8,8,0,8;9,3,0,0,0,3,3,9,6;9,9,9,0,9,0,9,9,0;9,5,5,0,0,5,0,9,6;9,7,7,0,7,7,0,0,7;0,7,7,0,7,0,1,1,0')
testmatrix = testmatrix -1
def path(q,r):
if (testmatrix[q,r] !=-1):
path(q,testmatrix[q,r])
print("v "+str(testmatrix[q,r]))
path(testmatrix[q,r],r)
path(6,7)
结果:
v 4
v 2
v 5
v 8
v 0
或者如果你真的坚持使用 1-9 索引,你可以将 path
放入 newpath
并在那里完成工作:
import numpy as np
testmatrix=np.matrix('0,7,7,0,7,7,0,0,7;0,0,7,0,7,9,0,1,0;9,0,0,0,7,0,2,9,6;9,8,8,0,8,8,8,0,8;9,3,0,0,0,3,3,9,6;9,9,9,0,9,0,9,9,0;9,5,5,0,0,5,0,9,6;9,7,7,0,7,7,0,0,7;0,7,7,0,7,0,1,1,0')
def new_path (q1,r1,testmatrix):
def path(q,r):
if (testmatrix[q,r] !=-1):
path(q,testmatrix[q,r])
print("v "+str(testmatrix[q,r]+1))
path(testmatrix[q,r],r)
testmatrix = testmatrix-1
q = q1-1
r = r1-1
path(q,r)
new_path(7,8,testmatrix)
结果:
v 5
v 3
v 6
v 9
v 1