考虑到这个代码争夺问题:
考虑位于n个岛屿上的大城市。有连接岛屿的桥梁,但它们都只有单向交通。更糟糕的是,大多数桥梁在晚上关闭,所以最多只有一座桥梁可以从任何一个岛屿A流向任何其他岛屿。
有一个程序员通过夜班作为优步司机来赚一分钱。一天晚上,他拿起一个从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];
然而,当我运行代码时,它只传递了6/7个测试用例(最后3个测试用例对我来说是隐藏的,所以我不知道输入是什么)。
有人能告诉我dijkstra的实施有什么问题吗?我错过了dijkstras的工作方式吗?
答案 0 :(得分:0)
您应该发现访问节点包含每次迭代中的最小密钥(距离),而不是尝试所有访问过的节点。尽管放松仍然是安全的,但您可能会将一些节点放在访问集上没有最佳密钥,从而影响结果。
此外,虽然我认为这不会改变结果,但最好避免使用==
或!=
比较两个浮点数。