具有最短路径的dijkstra算法

时间:2016-04-28 01:24:33

标签: python algorithm graph graph-algorithm dijkstra

有人可以帮助我或者指出我正确的方向我只是迷失了我不知道他们的意思是设定值到无穷大他们在谈论边缘吗?或者这是一个每个节点都有的新变量。一些建议或一些指向正确方向的帮助将不胜感激。继承了我到目前为止所拥有的东西(虽然我认为它是垃圾)

def dijkstra(self, start):

    print("end dijkstra")
    for node in self.__nodes:
            curr_node = 0
            for node in self.__nodes:
                distances = float('inf')
                before_node = None

                print(node)

    """
    try:


        #for node in weighted_digraph:
            #distances[node] = float('inf')
            #predecessors[node] = None
            print("work")
            print(node)
            #print(weighted_digraph)
        #sp_set = []
        #distances[start] = 0
    except TypeError:
        print("BS OCCURED")
    """

3 个答案:

答案 0 :(得分:0)

所以最初,你不知道每个节点距离源有多远(事实上,在图形未连接的情况下,它们可能根本不可达到!)。这个"设置为无限"业务与源节点到每个节点的最短距离有关。你的每个节点都需要知道它们距离它们的距离有多远,并且最初该值是无穷大的(因为你没有沿着任何边走过来枚举它们的路径)。

答案 1 :(得分:0)

要将变量值设置为无穷大,请使用:

var = float('inf')

执行此操作的原因通常是您希望在优化函数中找到最小值;将值设置为无穷大允许将其与任何其他值进行比较,并确保另一个值更低。

在最大化问题中,您可以在开始时将值设置为负无穷大,如下所示:

var = float('-inf')

in python> 3.5,你也可以使用数学模块:

var = math.inf
var = -math.inf

答案 2 :(得分:0)

  

他们的意思是将值设置为无穷大是他们在谈论边缘吗?

不,他们正在讨论您要将Dijkstra执行到其他每个节点的节点的距离。由于你最初是最短的距离,所以我们把它当作无限的。

以下是如何初始化它的示例(伪代码):

for each vertex v in Graph:
    dist[v] ← INFINITY
    prev[v] ← UNDEFINED // Previous node in optimal path from source

dist[source] ← 0 //distance from a node to itself is zero.