Exemple #1
0
    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]
Exemple #2
0
 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
Exemple #3
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
Exemple #4
0
 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()
Exemple #5
0
 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
Exemple #6
0
 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
Exemple #7
0
 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
Exemple #8
0
 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