Хакерранк - Дейкстра. Кратчайший путь 2
Я застрял на TestCase 7 (единственном, который мне не удалось), который, по моему мнению, был моей ошибкой. Я загрузил тестовый пример и проверил его сгенерированный вывод
Я делаю git diff и не вижу никакой разницы между ними. Можете ли вы помочь мне проверить, что случилось с моим кодом?
Или, возможно, если в моем коде нет подвоха, я хотел бы изменить вопрос:
Часто ли в HackerRank Platform есть ошибки?
Я часто сталкивался с неясным сбоем (обычно последний или два из 13 тестовых случаев) при выполнении HackerRank Challenge для моего собеседования, и, следовательно, несколько раз терпел неудачу в них. Интересно, есть ли у кого-нибудь из вас подобный опыт? Я подозреваю, что когда я проверял представленный код с друзьями, мы не можем найти какие-либо крайние случаи или ошибки. Это должно быть идеально. Как программист, который кодировал в LeetCode, это пугает меня, и я начал тренироваться на HackerRank.
Пожалуйста, посоветуйте. Спасибо
Ресурс:
PS вк папке на диске Google я прикрепил свой вывод: output_me.txt
и вывод истинной земли: output.txt
. Я добавил новые строки для обоих выходных данных (изначально все ответы были в одной длинной строке, добавлены новые строки, чтобы их было легче читать.)
Код:
import os
from collections import defaultdict
from heapq import heappop, heappush
MAX_INT = 2**31
# Build Graph
def buildGraph(edges):
graph = defaultdict(list)
trackMinEdge = {}
# build min edges from u - v (adjacent)
# for handling duplicate edges
for u, v, weight in edges:
u, v = min(u, v), max(u, v)
if (u, v) in trackMinEdge:
minWeight = trackMinEdge[(u, v)]
if minWeight <= weight:
# do not update
continue
# only update if (u, v) not in trackMinWeight
# or the new weight is smaller than minWeight
trackMinEdge[(u, v)] = weight
# build graph from minimum adjancent edge
for u, v in trackMinEdge:
weight = trackMinEdge[(u, v)]
graph[u].append((weight, v))
graph[v].append((weight, u))
return graph
# DJIKSTRA
def djikstra(n, graph, src, dest=None):
dists = {}
# setups
seen = set()
queue = [(0, src)]
dists[src] = 0
while queue:
dist_u, u = heappop(queue)
if u in seen: continue
seen.add(u)
for weight, v in graph.get(u, []):
if v in seen: continue
alt = dists[u] + weight
if alt < dists.get(v, MAX_INT):
dists[v] = alt
heappush(queue, (alt, v))
return dists
# Complete the shortestReach function below.
def shortestReach(n, edges, src):
graph = buildGraph(edges)
# edge cases: src not connected to any node
if not (src in graph):
return [-1 for _ in range(n-1)]
dists = djikstra(n, graph, src)
distsTable = []
for i in range(1, n+1):
if i in dists and i != src:
distsTable.append(dists[i])
elif not (i in dists):
distsTable.append(-1)
return distsTable
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w+')
t = int(input())
for t_itr in range(t):
nm = input().split()
n = int(nm[0])
m = int(nm[1])
edges = []
for _ in range(m):
edges.append(list(map(int, input().rstrip().split())))
s = int(input())
result = shortestReach(n, edges, s)
fptr.write(' '.join(map(str, result)))
fptr.write('\n')
fptr.close()
С уважением,
Я