我不想要答案,但我无法跟踪节点。意思是说我有节点0,1,2,3,4,5,6,7,其中0是开始,7是目标,我做了一个邻接矩阵,如下所示:
[
[0, 3, 0, 0, 4, 0, 0, 0],
[3, 0, 0, 0, 5, 0, 8, 0],
[0, 0, 0, 4, 0, 5, 0, 0],
[0, 0, 4, 0, 0, 0, 0, 14],
[4, 5, 0, 0, 0, 2, 0, 0],
[0, 0, 5, 0, 2, 0, 4, 0],
[0, 8, 0, 5, 0, 4, 0, 0],
[0, 0, 0, 14, 0, 0, 0, 0]
]
如果它是0,则节点之间没有链接,否则,如果它大于1,则该数字是这些节点之间边缘的权重。
我无法识别实际节点与路径的对比。
我可以找到目标,但我不知道如何显示目标的路径,以及总重量是多少?
编辑: 这是我想要实现的目标(这不起作用,但这是一般的想法):
def dfs(graph, start, goal):
stack = []
visited = []
stack.append(graph[start])
visited.append(start)
while (len(stack) != 0):
current_node = stack.pop()
if current_node not in visited:
visited.append(current_node)
if current_node = goal:
return path
else:
for nodes in current_node:
if nodes not in visited:
stack.append(nodes)
如果边缘未被称重,这将更容易,但我基本上添加当前节点的所有邻居,只要我没有访问它到堆栈,直到我找到目标节点,并且然后我想回到路上。但是在这种情况下,我知道它被打破了,因为1)我不确定如何检查它是否是目标节点,因为我只存储节点邻居,2)没有检查完整路径。
答案 0 :(得分:1)
在遇到顶点时保持path variable
存储顶点。当你找到end
顶点时,路径变量将具有路径。
找到伪代码以供参考。请原谅代码中的任何小错误
DFS (vertex start, vertex end, Graph G, list path):
if(start==end):
return TRUE
for vertex in adjacent(start):
if vertex not in path: # has not been traversed
path = path + [vertex]
a = DFS(vertex, end, G, path)
if a==TRUE: # end vertex was found
return TRUE
path.delete(vertex) # delete the vertex added,as its not in the path from start to end
度Acc。对于你的代码,当你找到目标顶点时,被访问堆栈包含路径中的元素。
我希望它有所帮助。