Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 代码战:迪克斯特拉';s算法的实现_Python_Algorithm_Graph Algorithm_Dijkstra - Fatal编程技术网

Python 代码战:迪克斯特拉';s算法的实现

Python 代码战:迪克斯特拉';s算法的实现,python,algorithm,graph-algorithm,dijkstra,Python,Algorithm,Graph Algorithm,Dijkstra,考虑到这一问题: 考虑一个位于n岛上的大城市。这些岛屿之间有桥梁连接,但它们都只有单向交通。更糟糕的是,大多数桥梁在夜间关闭,因此最多有一座桥梁的交通从任何一个A岛通往任何其他B岛 有一个程序员,他晚上做优步司机,赚了一分钱。一天晚上,当他接上一名从0号岛到n-1号岛的骑手时,他的手机就坏了。不过,他在笔记本电脑中有城市桥梁的地图(存储为距离矩阵),因此他决定实施一种算法,计算这两个岛屿之间的最短路径,并根据路径距离评估成本。假设旅行的每英里是1美元 我决定用Dijkstra的算法来解决这个问题

考虑到这一问题:

考虑一个位于n岛上的大城市。这些岛屿之间有桥梁连接,但它们都只有单向交通。更糟糕的是,大多数桥梁在夜间关闭,因此最多有一座桥梁的交通从任何一个A岛通往任何其他B岛

有一个程序员,他晚上做优步司机,赚了一分钱。一天晚上,当他接上一名从0号岛到n-1号岛的骑手时,他的手机就坏了。不过,他在笔记本电脑中有城市桥梁的地图(存储为距离矩阵),因此他决定实施一种算法,计算这两个岛屿之间的最短路径,并根据路径距离评估成本。假设旅行的每英里是1美元

我决定用Dijkstra的算法来解决这个问题:

def nightRoute(city):
    visited = [];
    visited.append(0);
    distance = [];
    for x in range(0, len(city)):
        distance.append(float("inf"));
    distance[0] = 0;
    
    while(len(visited) != len(city)):
        for i in visited:
            print visited;
            min = float("inf");
            minNode = -1;
            for j in range(0, len(city)):
                if ( j not in visited and city[i][j] != -1):
            if distance[j] > distance[i] + city[i][j]:
            distance[j] = distance[i] + city[i][j]
                    if distance[i] + city[i][j] <= min:
                        min = distance[i] + city[i][j];
                        minNode = j
            if(min != float("inf") and minNode != -1):
                visited.append(minNode);
    return distance[len(city)-1];
def夜间路线(城市):
访问=[];
已访问。追加(0);
距离=[];
对于范围(0,len(城市))内的x:
距离。追加(浮点(“inf”);
距离[0]=0;
while(len(visted)!=len(city)):
因为我访问过:
访问的印刷品;
最小值=浮动(“inf”);
minNode=-1;
对于范围(0,len(城市))内的j:
如果(j不在访问城市[i][j]!=-1):
如果距离[j]>距离[i]+城市[i][j]:
距离[j]=距离[i]+城市[i][j]

如果距离[i]+city[i][j]您应该会发现访问的节点在每次迭代中都包含最小键(距离),而不是尝试所有访问的节点。尽管松弛仍然是安全的,但您可能会将一些没有最佳密钥的节点放置到访问集,从而影响结果


此外,尽管我认为这不会改变结果,但最好避免使用
==
比较两个浮点数=

您应该发现访问的节点在每次迭代中包含最小键(距离),而不是尝试所有访问的节点。尽管松弛仍然是安全的,但您可能会将一些没有最佳密钥的节点放置到访问集,从而影响结果

此外,尽管我认为这不会改变结果,但最好避免使用
==
比较两个浮点数=