najkrótsza ścieżka od celu do rootowania w grafie ukierunkowanym z pytonem cykli

Chcę znaleźć najkrótszą drogę zgoal doroot działa wstecz

Moje dane wejściowe dlaroot jest{'4345092': ['6570646', '40586', '484']} Moje dane wejściowe dlagoal jest{'886619': ['GOAL']}

Moje dane wejściowe dlapath_holder jest wejściem, ale zostaje przekształcone nadct i jest używany do tej funkcji. Utknąłem w odniesieniu do pętli while, ponieważ tworzy ona dla mnie ścieżkę wstecz. W tej chwili nie mogę dostaćq drukować, ponieważ ta część kodu nie jest uruchomiona.dct jest zasadniczo skierowaną reprezentacją grafu, która zawiera cykle. Wydaje mi się, że nie wiem, jak zacząćGOAL i skończyć naroot węzeł. Zastanawiałem się, czy ktoś może mi pomóc to zrozumieć!

dct:

dct = 
{ '612803266': ['12408765', '46589', '5880', '31848'], 
  '8140983': ['7922972', '56008'],
  '7496838': ['612803266'], 
  '1558536111': ['7496838'], 
  '31848': ['DEADEND'], 
  '1910530': ['8140983'], 
  '242010': ['58644', '886619'], 
  '727315568': ['DEADEND'], 
  '12408765': ['DEADEND'], 
  '56008': ['DEADEND'], 
  '58644': ['DEADEND'], 
  '886619': ['GOAL'], 
  '40586': ['931', '727315568', '242010', '1910530'], 
  '5880': ['1558536111'], 
  '46589': ['DEADEND'], 
  '6570646': ['2549003','43045', '13830'],
  '931': ['299159122'],
  '484': ['1311310', '612803266'],
  '1311310': ['DEADEND'],
  '7922972': ['DEADEND']
  }

moja funkcja:

def backtrace(path_holder, root, goal):
    dct = {}
    for d in path_holder:
            dct.update(d)
    rootnode = root.keys()[0]
    goal = goal.keys()[0]
    path = []
    path.append(goal)
    q = 0
    while goal != rootnode: 
        # find key that contains goal in list
        for i in dct:   #iterate keys
            if i in dct:    # prevent repeat of path
                continue
            for j in dct[i]:    #iterate though children
                if j == goal:
                    path.append(i)
                    goal = i    # look for new goal
                    q += 1
                    print q
                    #print goal

        # append key that has goal in the list
        # set goal to be the key that was appended
        # repeat

    return path

questionAnswers(1)

yourAnswerToTheQuestion