""" # Definition for a Node. class Node: def __init__(self, val = 0, neighbors = None): self.val = val self.neighbors = neighbors if neighbors is not None else [] """
classSolution: defcloneGraph(self, node: 'Node') -> 'Node': if node isNone: returnNone
q = [node] res_set = set() max_node_index = -1 while q: temp_q = [] for node in q: if node notin res_set: res_set.add(node) if node.val > max_node_index: max_node_index = node.val for neighbor in node.neighbors: temp_q.append(neighbor) q = temp_q
node_list = [Node(index) for index inrange(1, max_node_index + 1)]
for node in res_set:
copy_node = node_list[node.val - 1]
for neighbor in node.neighbors: copy_node.neighbors.append(node_list[neighbor.val - 1]) return node_list[0]
classSolution: defminMutation(self, startGene: str, endGene: str, bank: List[str]) -> int: defcheck_valid(data1, data2): iflen(data1) != len(data2): returnFalse num = 0 for index inrange(len(data1)): if data1[index] != data2[index]: num += 1 if num == 1: returnTrue else: returnFalse
visited = set() visited.add(startGene) q = [startGene] step = 0 while q: temp_q = [] step += 1 for str_data in q: for data in bank: if data notin visited: if check_valid(str_data, data): temp_q.append(data) visited.add(data) if data == endGene: return step q = temp_q return -1