BFS: Shortest Reach in a Graph

  • + 0 comments

    Python

    from collections import deque, defaultdict
    class Graph:
        def __init__(self, n):
            self.n = n
            self.neighbors = defaultdict(set)
        
        def connect(self, a, b):
            self.neighbors[a].add(b)
            self.neighbors[b].add(a)
    
        
        def find_all_distances(self, start):
            distances = {}
            queue = deque((n, 1) for n in self.neighbors[start])
            visited = set([start])
            while queue:
                curr_node, dist_from_start = queue.popleft()
                if curr_node in visited:
                    continue
                visited.add(curr_node)
                distances[curr_node] = dist_from_start * 6
                queue.extend((n, dist_from_start+1) for n in self.neighbors[curr_node])
            
            for i in range(0, self.n):
                if i == start:
                    continue
                print(distances.get(i, -1), end=" ")
            print()