Building an undirected graph and finding shortest path using Dictionaries in Python

15 Dec, 2021
Prerequisites: 
BFS for a Graph
Dictionaries in Python
In this article, we will be looking at how to build an undirected graph and then find the shortest path between two nodes/vertex of that graph easily using dictionaries in Python Language. 
Approach: The idea is to store the adjacency list into the dictionaries, which helps to store the graph in any format not only in the form of the integers. Here we have used characters as a reference on those places any custom objects can also be used.
Below is the implementation of the above approach:  
Python3
# Python3 implementation to build a# graph using Dictionaries from collections import defaultdict # Function to build the graphdef build_graph():    edges = [        ["A", "B"], ["A", "E"],        ["A", "C"], ["B", "D"],        ["B", "E"], ["C", "F"],        ["C", "G"], ["D", "E"]    ]    graph = defaultdict(list)         # Loop to iterate over every    # edge of the graph    for edge in edges:        a, b = edge[0], edge[1]                 # Creating the graph        # as adjacency list        graph[a].append(b)        graph[b].append(a)    return graph if __name__ == "__main__":    graph = build_graph()         print(graph)
{
   'G': ['C'], 
   'F': ['C'], 
   'E': ['A', 'B', 'D'], 
   'A': ['B', 'E', 'C'], 
   'B': ['A', 'D', 'E'], 
   'D': ['B', 'E'], 
   'C': ['A', 'F', 'G']
}
 
Approach: The idea is to use queue and visit every adjacent node of the starting nodes that traverses the graph in Breadth-First Search manner to find the shortest path between two nodes of the graph.
Below is the implementation of the above approach:
Python3
# Python implementation to find the# shortest path in the graph using# dictionaries # Function to find the shortest# path between two nodes of a graphdef BFS_SP(graph, start, goal):    explored = []         # Queue for traversing the    # graph in the BFS    queue = [[start]]         # If the desired node is    # reached    if start == goal:        print("Same Node")        return         # Loop to traverse the graph    # with the help of the queue    while queue:        path = queue.pop(0)        node = path[-1]                 # Condition to check if the        # current node is not visited        if node not in explored:            neighbours = graph[node]                         # Loop to iterate over the            # neighbours of the node            for neighbour in neighbours:                new_path = list(path)                new_path.append(neighbour)                queue.append(new_path)                                 # Condition to check if the                # neighbour node is the goal                if neighbour == goal:                    print("Shortest path = ", *new_path)                    return            explored.append(node)     # Condition when the nodes    # are not connected    print("So sorry, but a connecting"\                "path doesn't exist :(")    return # Driver Codeif __name__ == "__main__":         # Graph using dictionaries    graph = {'A': ['B', 'E', 'C'],            'B': ['A', 'D', 'E'],            'C': ['A', 'F', 'G'],            'D': ['B', 'E'],            'E': ['A', 'B', 'D'],            'F': ['C'],            'G': ['C']}         # Function Call    BFS_SP(graph, 'A', 'D')
Shortest path =  A B D
 
simranarora5sos
sweetyty
Algorithms-Graph Shortest Paths Quiz
Python dictionary-programs
python-dict
Algorithms
Data Structures
Graph
Python
Data Structures
python-dict
Graph
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.