Python 二部加权图中的最便宜路径DFS/贪婪BFS

Python 二部加权图中的最便宜路径DFS/贪婪BFS,python,graph,path,depth-first-search,Python,Graph,Path,Depth First Search,我有一个二部加权图(更确切地说是一个赋值问题),我想找到最便宜的路径/选择。知道我将如何实现DFS或贪婪BFS来实现路径吗 我把这个图表示成一个绝热列表(或者我认为最好是这样)和DFS算法 adjlist = {"A": ["W", "X"], "B": ["W", "X", "Y", "Z"], "C": ["Y", "Z"], "D": ["W", "X", "Y", "Z"], "W": ["A", "

我有一个二部加权图(更确切地说是一个赋值问题),我想找到最便宜的路径/选择。知道我将如何实现DFS或贪婪BFS来实现路径吗

我把这个图表示成一个绝热列表(或者我认为最好是这样)和DFS算法

adjlist = {"A": ["W", "X"],
           "B": ["W", "X", "Y", "Z"],
           "C": ["Y", "Z"],
           "D": ["W", "X", "Y", "Z"],
           "W": ["A", "B", "D"],
           "X": ["A", "B", "D"],
           "Y": ["B", "C", "D"],
           "Z": ["B", "C", "D"] }

def dfser(graph, root):
    visited =[]
    stack = [root, ]

    while stack:
        node = stack.pop()
        if node not in visited:
            visited.append(node)
            stack.extend([x for x in graph[node] if x not in visited])
    return visited
有可能是我想要的吗?结果一定是:AWBXCYDZ或是最便宜的东西

或者我可以从根目录获取所有可能的遍历吗?这个DFS只给了我一个,但我想要所有可能的Transversals,或者不是为最短路径搜索而设计的,特别是在加权图中

可以使用或算法查找最便宜的路径。 Networkx为该任务提供了一个解决方案

networkx模块实现以下功能和相关算法:

Dicti = {"A": {"W": 2, "X": 2},
     "B": {"W": 4, "X": 3, "Y": 2, "Z": 5},
     "C": {"Y": 2, "Z": 2},
     "D": {"W": 5, "X": 5, "Y": 4, "Z": 3},
     "W": {"A": 2, "B": 4, "D": 5},
     "X": {"A": 2, "B": 3, "D": 5},
     "Y": {"B": 2, "C": 2, "D": 4},
     "Z": {"B": 5, "C": 2, "D": 3}
}

graph = nx.Graph()
for node, succs in Dicti.items():
    for succ, weight in succs:
        graph.add_edge(node, succ, weight=weight)

print(nx.dijkstra_path(graph, 'A', 'Z'))  # here is Dijkstra
或者不设计为最短路径搜索,特别是在加权图中

可以使用或算法查找最便宜的路径。 Networkx为该任务提供了一个解决方案

networkx模块实现以下功能和相关算法:

Dicti = {"A": {"W": 2, "X": 2},
     "B": {"W": 4, "X": 3, "Y": 2, "Z": 5},
     "C": {"Y": 2, "Z": 2},
     "D": {"W": 5, "X": 5, "Y": 4, "Z": 3},
     "W": {"A": 2, "B": 4, "D": 5},
     "X": {"A": 2, "B": 3, "D": 5},
     "Y": {"B": 2, "C": 2, "D": 4},
     "Z": {"B": 5, "C": 2, "D": 3}
}

graph = nx.Graph()
for node, succs in Dicti.items():
    for succ, weight in succs:
        graph.add_edge(node, succ, weight=weight)

print(nx.dijkstra_path(graph, 'A', 'Z'))  # here is Dijkstra

这是家庭作业吗?如果没有,您可以查看
networkx
模块,该模块实现了许多这样的算法。如果你表现出你的努力和你的坚持,你也会得到更多的帮助。这是家庭作业吗?如果没有,您可以查看
networkx
模块,该模块实现了许多这样的算法。如果你能展示你所做的尝试和你特别坚持的东西,你也会得到更多的帮助。是的,但我想知道是否有可能用DFS或贪婪的BFS来解决这个问题?Dijkstra和A*并不能真正帮助我解决问题,但它是一种启发式算法,因此结果可能不是最优的。请注意,A*算法是最佳优先搜索的一种特殊情况,其中最佳节点越近。使用BFS/DFS可以解决问题,但需要找到所有路径,然后最小化,在这一点上,BFS/DFS之间的选择在很大程度上是不相关的(相同的时间/复杂性)。Dijkstra或A*在寻找最优解方面更有效。好吧,因为我需要DFS和GBFS,所以我必须遍历图,得到24个不同的结果,然后计算它们的和并对它们进行排序?我如何使DFS提供更多的遍历方差?是的,但我想知道是否有可能用DFS或贪婪BFS解决它?Dijkstra和A*并不能真正帮助我解决问题,但它是一种启发式算法,因此结果可能不是最优的。请注意,A*算法是最佳优先搜索的一种特殊情况,其中最佳节点越近。使用BFS/DFS可以解决问题,但需要找到所有路径,然后最小化,在这一点上,BFS/DFS之间的选择在很大程度上是不相关的(相同的时间/复杂性)。Dijkstra或A*在寻找最优解方面更有效。好吧,因为我需要DFS和GBFS,所以我必须遍历图,得到24个不同的结果,然后计算它们的和并对它们进行排序?如何使DFS提供更多的遍历方差?