Как написать алгоритм dijkstras для случаев O (n ^ 3) и O (n ^ 2) в python 3.7, попытка уже сделана, но нужна помощь, чтобы увидеть ошибки - PullRequest
1 голос
/ 07 мая 2019

Я был настроен на кодирование обоих алгоритмов djkstras O (n3) и O (n2) в Python, и мне дали пустой скрипт для подражания.Я пытался закодировать оба, однако, был очень неудачным, когда запускал проблемы через него.Мне также предоставили псевдокод для обоих, но мне трудно следовать.Может ли кто-нибудь указать мне правильное направление, как это исправить?Буду очень признателен.Ниже приведен код, который я пытался

import numpy

def dijkstra1(successors, s):

    S = []
    S.append(s)
    n = len(successors)
    L = dict()
    L[s] = 0
    P = dict()
    P[s] = '-'


    for i in S:
        minlength_j = numpy.inf
        for j, length_ij in successors[i].items():
            if j in S:
                continue
            if L[i] + length_ij < minlength_j:
                minlength_j = L[i] + length_ij
            L[j] = minlength_j
            P[j] = i
            if(j not in S and j < n):
              S.append(j)

    return L,P

def dijkstra2(successors, s):

    S = []
    S.append(s)
    n = len(successors)
    L = dict()
    L[s] = 0
    P = dict()
    P[s] = '-'

    for i in S:
        minlength_j = numpy.inf
        for j, length_ij in successors[i].items():
            if j in S:
                continue
            if L[i] + length_ij < minlength_j:
                minlength_j = L[i] + length_ij
            L[j] = minlength_j
            P[j] = i
            if(j not in S and j < n):
              S.append(j)
            for j in S:
                if w in S:
                    continue
                for w, length_wj in successors[w].items():
                    if L[w] + length_wj < L[j]:
                      L[j] = L[w] + length_wj
                      P[j] = w

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