Тестовые случаи Hackerrank неверны? Дейкстра Shortest Reach 2 - PullRequest
0 голосов
/ 03 ноября 2019

Хакерранк - Дейкстра. Кратчайший путь 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()

С уважением,

Я

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...