1971. Find if Path Exists in Graph

1971. Find if Path Exists in Graph

這個題目有兩個地方要注意,圖形的任兩個節點之間是雙向的,接著就是要選擇要使用深度優先還是廣度優先的搜索。

廣度優先

class Solution:
    def validPath(self, n: int, edges: List[List[int]], source: int, destination: int) -> bool:
        graph = collections.defaultdict(list)
        for a, b in edges:
            graph[a].append(b)
            graph[b].append(a)
        
        # Store all the nodes to be visited in 'queue'.
        visited = set()
        visited.add(source)
        queue = deque([source])
    
        while queue:
            curr = queue.popleft()
            if curr == destination:
                return True

            for child in graph[curr]:
                if child not in visited:                
                    visited.add(child)
                    queue.append(child)
        
        return False

深度優先

class Solution:
    def validPath(self, n: int, edges: List[List[int]], source: int, destination: int) -> bool:
        if not edges:
            return source == destination

        table = defaultdict(list)
        for edge in edges:
            table[edge[0]].append(edge[1]) 
            table[edge[1]].append(edge[0])

        visited = set()
        
        def dfs(curr):
            if curr == destination:
                return True
            for node in table[curr]:
                if node not in visited:
                    visited.add(node)
                    if dfs(node):
                        return True
            return False
        
        return dfs(source)