深度优先使用邻接矩阵在无向加权图中搜索?

时间:2016-10-03 20:15:58

标签: python algorithm search graph tree

我不想要答案,但我无法跟踪节点。意思是说我有节点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)没有检查完整路径。

1 个答案:

答案 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。对于你的代码,当你找到目标顶点时,被访问堆栈包含路径中的元素。

我希望它有所帮助。