[英]CodeFights: Dijkstra's Algorithm implementation
考虑以下代码冲突问题:
考虑一个位于n个岛上的大城市。 有连接岛屿的桥梁,但它们都只有单向交通。 更糟糕的是,大多数桥梁在夜间关闭,因此最多只有一座桥梁,交通从任何岛屿A到任何其他岛屿B。
有一个程序员在夜里以Uber司机的身分赚钱。 一天晚上,他接载从零岛到零岛(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];
但是,当我运行代码时,它仅通过6/7个测试用例(最后3个测试用例对我隐藏了,所以我不知道输入的是什么)。
谁能告诉我我实施dijkstra的问题是什么? 我在dijkstras的工作方式中缺少什么吗?
您应该找到每次迭代中包含最小键(距离)的访问节点,而不是尝试所有访问节点。 尽管放宽仍然是安全的,但是您可以将一些没有最佳关键字的节点放到被访问集合中,因此会影响结果。
此外,尽管我认为这不会改变结果,但最好避免使用==
或!=
比较两个浮点数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.