Learn Algorithm Design by Building a Shortest Path Algorithm - Step 47

Tell us what’s happening:

Describe your issue in detail here.

I have tried multiple multiple ways, have seen feedback from others and what people gave as hints but still can’t understand what’s the answer…

Your code so far

my_graph = {
    'A': [('B', 3), ('D', 1)],
    'B': [('A', 3), ('C', 4)],
    'C': [('B', 4), ('D', 7)],
    'D': [('A', 1), ('C', 7)]
}

def shortest_path(graph, start):
    unvisited = list(graph)
    distances = {node: 0 if node == start else float('inf') for node in graph}
    paths = {node: [] for node in graph}
    paths[start].append(start)
    
    while unvisited:
        current = min(unvisited, key=distances.get)
        for node, distance in graph[current]:
            if distance + distances[current] < distances[node]:
                distances[node] = distance + distances[current]

# User Editable Region

                if paths[node] and paths[node][-1] == node:
                    paths[node] = paths[current]
                    

# User Editable Region

                else:
                    paths[node].extend(paths[current])
                paths[node].append(node)
        unvisited.remove(current)
    
    print(f'Unvisited: {unvisited}\nDistances: {distances}\nPaths: {paths}')
    
shortest_path(my_graph, 'A')

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36

Challenge Information:

Learn Algorithm Design by Building a Shortest Path Algorithm - Step 47

You appear to have created this post without editing the template. Please edit your post to Tell us what’s happening in your own words.

What have you tried?

You need to create a new list by using a complete slice of the old list:

new_list = old_list[:]

https://therenegadecoder.com/code/how-to-clone-a-list-in-python/#copy-a-list-using-a-slice

https://www.geeksforgeeks.org/python-cloning-copying-list/

If you leave it like this:

paths[node] = paths[current]

They both refer to the same list in memory and changes to one will affect both.

I found the solution but I still did not understand much…

1 Like

Did you read this?
https://therenegadecoder.com/code/how-to-clone-a-list-in-python/#problem-introduction

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.