def shortestAlternatingPaths(self, n: int, red_edges: List[List[int]], blue_edges: List[List[int]]) -> List[int]: dist = [float('inf')] * n dist[0] = 0 re = {i: [] for i in range(n)} be = {i: [] for i in range(n)} for u, v in red_edges: re[u].append(v) for u, v in blue_edges: be[u].append(v) queue = Deque([(0, 0, 'b'), (0, 0, 'r')]) vis = {(0, 'b'): True, (0, 'r'): True} while queue: node, level, color = queue.popleft() if color == 'b' or color == None: for neig in re[node]: if (neig, "r") not in vis: dist[neig] = min(dist[neig], level + 1) queue.append((neig, level + 1, 'r')) vis[(neig, 'r')] = True if color == 'r' or color == None: for neig in be[node]: if (neig, "b") not in vis: dist[neig] = min(dist[neig], level + 1) queue.append((neig, level + 1, 'b')) vis[(neig, 'b')] = True return [-1 if val == float('inf') else val for val in dist]
def test_length(self): q = Deque() assert q.length() == 0 q.push_front('A') assert q.length() == 1 q.push_front('B') assert q.length() == 2 q.pop_front() assert q.length() == 1 q.pop_front() assert q.length() == 0
def test_is_empty(self): q = Deque() assert q.is_empty() is True q.push_front('A') assert q.is_empty() is False q.pop_front() assert q.is_empty() is True q.push_back('A') assert q.is_empty() is False q.pop_back() assert q.is_empty() is True
def test_pop_back(self): q = Deque(['A', 'B', 'C']) assert q.pop_back() == 'C' assert q.length() == 2 assert q.pop_back() == 'B' assert q.length() == 1 assert q.pop_back() == 'A' assert q.length() == 0 assert q.is_empty() is True with self.assertRaises(ValueError): q.pop_back()
def test_back(self): q = Deque() assert q.back() is None q.push_back('A') assert q.back() == 'A' q.push_back('B') assert q.back() == 'B' q.pop_back() assert q.back() == 'A' q.pop_front() assert q.back() is None
def test_push_back(self): q = Deque() q.push_back('A') assert q.front() == 'A' assert q.back() == 'A' assert q.length() == 1 q.push_back('B') assert q.front() == 'A' assert q.back() == 'B' assert q.length() == 2 q.push_back('C') assert q.front() == 'A' assert q.back() == 'C' assert q.length() == 3 assert q.is_empty() is False
def test_init_with_list(self): q = Deque(['A', 'B', 'C']) assert q.front() == 'A' assert q.back() == 'C' assert q.length() == 3 assert q.is_empty() is False
def test_init(self): q = Deque() assert q.front() is None assert q.back() is None assert q.length() == 0 assert q.is_empty() is True