Python 代码战:迪克斯特拉';s算法的实现
考虑到这一问题: 考虑一个位于n岛上的大城市。这些岛屿之间有桥梁连接,但它们都只有单向交通。更糟糕的是,大多数桥梁在夜间关闭,因此最多有一座桥梁的交通从任何一个A岛通往任何其他B岛 有一个程序员,他晚上做优步司机,赚了一分钱。一天晚上,当他接上一名从0号岛到n-1号岛的骑手时,他的手机就坏了。不过,他在笔记本电脑中有城市桥梁的地图(存储为距离矩阵),因此他决定实施一种算法,计算这两个岛屿之间的最短路径,并根据路径距离评估成本。假设旅行的每英里是1美元 我决定用Dijkstra的算法来解决这个问题:Python 代码战:迪克斯特拉';s算法的实现,python,algorithm,graph-algorithm,dijkstra,Python,Algorithm,Graph Algorithm,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]您应该会发现访问的节点在每次迭代中都包含最小键(距离),而不是尝试所有访问的节点。尽管松弛仍然是安全的,但您可能会将一些没有最佳密钥的节点放置到访问集,从而影响结果
此外,尽管我认为这不会改变结果,但最好避免使用==
或比较两个浮点数=代码>您应该发现访问的节点在每次迭代中包含最小键(距离),而不是尝试所有访问的节点。尽管松弛仍然是安全的,但您可能会将一些没有最佳密钥的节点放置到访问集,从而影响结果
此外,尽管我认为这不会改变结果,但最好避免使用==
或比较两个浮点数=代码>