【发布时间】:2019-06-27 02:06:03
【问题描述】:
所以我正在做一个项目,我必须找到最好的路径......所以我现在为此使用了 DFS,问题是在递归调用时它会打印所有可能的结果,最后最好的。但是这些值并没有存储在类的“PathList”变量列表中。
例如:Graph.py 是另一个存储图表的文件
import Graph
class G:
def __init__(self,Graph,vis):
self.graph = Graph
self.dist=1000000
self.PathList= []
self.stack=[]
self.visited=vis
def addEdge(self, u,v):
self.graph[u].append(v)
def DFScall(self,v,f,dis):
self.visited[v]=True
self.stack.append(v)
dis+=1
if(v==f):
if(dis<self.dist):
self.PathList = self.stack
self.dist=dis
#print(self.PathList)
else :
for i in self.graph[v]:
if self.visited[i] == False:
#print(self.visited[i])
self.DFScall(i,f,dis)
self.stack.pop()
self.visited[v]=False
def DFS(self,v,f):
self.DFScall(v,f,0)
def returnPath(self):
return self.PathList
if __name__== "__main__":
graph=Graph.returnGraph()
vis=Graph.returnNodes()
g = G(graph,vis)
g.DFS('S1','B8')
Pathlist = g.returnPath()
print(Pathlist)
输出是:
['S1', 'F0', 'E1', 'D0', 'C1', 'C2', 'B3', 'B4', 'C5', 'D4', 'D3', 'E2', 'F3', 'G2', 'H3', 'I2', 'J3', 'J4', 'I5', 'H4', 'G5', 'F4', 'E5', 'E6', 'D7', 'C6', 'B7', 'B8']
['S1', 'F0', 'E1', 'D0', 'C1', 'C2', 'B3', 'B4', 'C5', 'D4', 'D3', 'E2', 'F3', 'G2', 'H3', 'H4', 'G5', 'F4', 'E5', 'E6', 'D7', 'C6', 'B7', 'B8']
['S1', 'F0', 'E1', 'D0', 'C1', 'C2', 'B3', 'B4', 'C5', 'D4', 'D3', 'E2', 'F3', 'F4', 'E5', 'E6', 'D7', 'C6', 'B7', 'B8']
['S1', 'F0', 'E1', 'D0', 'C1', 'C2', 'B3', 'B4', 'C5', 'D4', 'E5', 'E6', 'D7', 'C6', 'B7', 'B8']
['S1', 'F0', 'E1', 'D0', 'C1', 'C2', 'B3', 'B4', 'C5', 'C6', 'D7', 'D8', 'C9', 'B8']
['S1', 'F0', 'E1', 'D0', 'C1', 'C2', 'B3', 'B4', 'C5', 'C6', 'B7', 'B8']
['S1', 'F0', 'E1', 'E2', 'D3', 'D4', 'C5', 'C6', 'B7', 'B8']
[]
最后,list 输出是通过 main 调用时的输出.....在这种情况下我应该做什么,告诉我是否有什么需要研究的。
谢谢
【问题讨论】:
-
self.PathList = self.stack如果您要复制,那是错误的做法。试试看:self.PathList = self.stack[:] -
@BanishedBot ...非常感谢它成功了
-
太棒了!我将其发布为答案。
标签: python python-3.x class recursion depth-first-search