Пример #1
0
class TestBFS_Case_6(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 3
        self.graph = Graph(self.START)
        self.graph.add_edge(10, 6)
        self.graph.add_edge(3, 1)
        self.graph.add_edge(10, 1)
        self.graph.add_edge(3, 1)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(5, 2)
        return super().setUp()

    def test_case_6(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(),
                         [6, -1, -1, -1, -1, -1, 12, -1, 12])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
    def read_graph(self):
        """
        Dataset is in txt each line is in the format "FromNodeId, ToNodeId"
        Since we are not interested on the weight, we get only the first two attributes
        We remove the last element in the list splitted [:-1]
        :return:
        """
        filename = self.path
        edges = []
        with open(filename) as f:
            for line in f:
                edges.append([int(n) for n in line.strip().split()][:-1])

        nodes = []
        for e in edges[:-1]:
            nodes.append(e[0])
            nodes.append(e[1])

        nodes = list(set(nodes))

        myGraph = Graph(len(nodes))
        for el in edges[:-1]:
            curr_edge = Edge(Node(el[0]), Node(el[1]))
            myGraph.add_edge(curr_edge)

            if self.is_undirected:
                curr_edge_inv = Edge(Node(el[1]), Node(el[0]))
                myGraph.add_edge(curr_edge_inv)

        return myGraph
Пример #3
0
class TestBFS_Case_1(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 2
        self.graph = Graph(self.START)
        self.graph.add_edge(3, 1)
        self.graph.add_edge(2, 3)
        return super().setUp()

    def test_case_1(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(), [-1, 6])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
Пример #4
0
class TestBFS_Case_0(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 1
        self.graph = Graph(self.START)
        self.graph.add_edge(4, 2)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 3)
        return super().setUp()

    def test_case_0(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(), [6, 6, -1])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
Пример #5
0
        for nextv in self._graph.adj(current):
            if self._order.get(nextv) is None:
                self._search(current, nextv)
                self._low[current] = min(self._low[current], self._low[nextv])
                if self._low[current] == self._order[
                        current] and current != self.start:
                    self._briges.append((pre, current))
            elif nextv != pre:  # 不是来的路径
                self._low[current] = min(self._low[nextv],
                                         self._order[current])

    def has_brige(self):
        return len(self._briges) == 0

    def briges(self):
        return self._briges


# ================= test ===============
if __name__ == '__main__':
    g = Graph()
    g.add_edge(1, 3)
    # g.add_edge(1, 2)
    # g.add_edge(1, 6)
    # g.add_edge(4, 3)
    # g.add_edge(2, 6)
    # g.add_edge(9, 10)
    # g.add_edge(6, 10)
    s = Brige(g)
    print(s.briges())
Пример #6
0
        self._marked[start] = True
        self._id[start] = self._count
        while not q.empty():
            vertex = q.get()
            for v in self._graph.adj(vertex):
                if self._marked.get(v) is not True:
                    q.put(v)
                    self._marked[v] = True
                    self._id[v] = self._count

    def is_connect(self, vertex1, vertex2):
        return self._id[vertex1] == self._id[vertex2]

    def CC_count(self):
        return self._count


# ================= test ===============
if __name__ == '__main__':

    with open('./tinyG.txt') as f:
        g = Graph()
        f.readline()
        f.readline()
        for l in f.readlines():
            datas = l.split(' ')
            g.add_edge(int(datas[0]), int(datas[1]))
        s = CC(g)
        print(s.CC_count())
        print(s.is_connect(2, 6))
Пример #7
0
class TestBFS_Case_15(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 152
        self.graph = Graph(self.START)
        self.graph.add_edge(165, 298)
        self.graph.add_edge(21, 34)
        self.graph.add_edge(115, 12)
        self.graph.add_edge(79, 102)
        self.graph.add_edge(116, 150)
        self.graph.add_edge(40, 94)
        self.graph.add_edge(51, 54)
        self.graph.add_edge(159, 72)
        self.graph.add_edge(35, 42)
        self.graph.add_edge(114, 98)
        self.graph.add_edge(14, 30)
        self.graph.add_edge(133, 68)
        self.graph.add_edge(101, 72)
        self.graph.add_edge(163, 132)
        self.graph.add_edge(165, 144)
        self.graph.add_edge(162, 84)
        self.graph.add_edge(125, 1)
        self.graph.add_edge(18, 78)
        self.graph.add_edge(15, 162)
        self.graph.add_edge(102, 54)
        self.graph.add_edge(81, 50)
        self.graph.add_edge(82, 138)
        self.graph.add_edge(7, 80)
        self.graph.add_edge(64, 28)
        self.graph.add_edge(164, 38)
        self.graph.add_edge(64, 154)
        self.graph.add_edge(25, 100)
        self.graph.add_edge(41, 92)
        self.graph.add_edge(102, 52)
        self.graph.add_edge(39, 92)
        self.graph.add_edge(32, 56)
        self.graph.add_edge(158, 64)
        self.graph.add_edge(79, 106)
        self.graph.add_edge(57, 150)
        self.graph.add_edge(102, 132)
        self.graph.add_edge(42, 28)
        self.graph.add_edge(102, 58)
        self.graph.add_edge(90, 100)
        self.graph.add_edge(104, 40)
        self.graph.add_edge(103, 102)
        self.graph.add_edge(117, 64)
        self.graph.add_edge(2, 50)
        self.graph.add_edge(117, 146)
        self.graph.add_edge(105, 130)
        self.graph.add_edge(97, 110)
        self.graph.add_edge(12, 32)
        self.graph.add_edge(155, 154)
        self.graph.add_edge(152, 92)
        self.graph.add_edge(23, 44)
        self.graph.add_edge(94, 58)
        self.graph.add_edge(121, 86)
        self.graph.add_edge(144, 98)
        self.graph.add_edge(27, 66)
        self.graph.add_edge(113, 10)
        self.graph.add_edge(62, 14)
        self.graph.add_edge(143, 26)
        self.graph.add_edge(72, 26)
        self.graph.add_edge(101, 128)
        self.graph.add_edge(22, 14)
        self.graph.add_edge(13, 14)
        self.graph.add_edge(132, 124)
        self.graph.add_edge(115, 90)
        self.graph.add_edge(154, 60)
        self.graph.add_edge(27, 84)
        self.graph.add_edge(83, 158)
        self.graph.add_edge(34, 50)
        self.graph.add_edge(120, 112)
        self.graph.add_edge(27, 118)
        self.graph.add_edge(108, 116)
        self.graph.add_edge(150, 66)
        self.graph.add_edge(81, 136)
        self.graph.add_edge(67, 126)
        self.graph.add_edge(109, 86)
        self.graph.add_edge(164, 128)
        self.graph.add_edge(122, 92)
        self.graph.add_edge(140, 30)
        self.graph.add_edge(159, 122)
        self.graph.add_edge(137, 98)
        self.graph.add_edge(142, 64)
        self.graph.add_edge(12, 124)
        self.graph.add_edge(123, 96)
        self.graph.add_edge(58, 162)
        self.graph.add_edge(150, 138)
        self.graph.add_edge(154, 34)
        self.graph.add_edge(159, 102)
        self.graph.add_edge(132, 100)
        self.graph.add_edge(8, 72)
        self.graph.add_edge(123, 90)
        self.graph.add_edge(40, 58)
        self.graph.add_edge(84, 144)
        self.graph.add_edge(121, 146)
        self.graph.add_edge(47, 108)
        self.graph.add_edge(25, 32)
        self.graph.add_edge(163, 100)
        self.graph.add_edge(43, 38)
        self.graph.add_edge(36, 94)
        self.graph.add_edge(73, 132)
        self.graph.add_edge(116, 134)
        self.graph.add_edge(67, 134)
        self.graph.add_edge(23, 32)
        self.graph.add_edge(63, 32)
        self.graph.add_edge(112, 74)
        self.graph.add_edge(21, 100)
        self.graph.add_edge(90, 54)
        self.graph.add_edge(81, 116)
        self.graph.add_edge(48, 82)
        self.graph.add_edge(34, 6)
        self.graph.add_edge(3, 12)
        self.graph.add_edge(156, 130)
        self.graph.add_edge(38, 154)
        self.graph.add_edge(112, 156)
        self.graph.add_edge(54, 80)
        self.graph.add_edge(95, 34)
        self.graph.add_edge(123, 62)
        self.graph.add_edge(60, 54)
        self.graph.add_edge(161, 156)
        self.graph.add_edge(112, 158)
        self.graph.add_edge(73, 46)
        self.graph.add_edge(96, 64)
        self.graph.add_edge(99, 76)
        self.graph.add_edge(10, 28)
        self.graph.add_edge(1, 146)
        self.graph.add_edge(41, 152)
        self.graph.add_edge(117, 18)
        self.graph.add_edge(35, 26)
        self.graph.add_edge(59, 128)
        self.graph.add_edge(63, 54)
        self.graph.add_edge(40, 144)
        self.graph.add_edge(93, 66)
        self.graph.add_edge(75, 78)
        self.graph.add_edge(109, 1)
        self.graph.add_edge(116, 70)
        self.graph.add_edge(157, 120)
        self.graph.add_edge(115, 110)
        self.graph.add_edge(51, 150)
        self.graph.add_edge(143, 116)
        self.graph.add_edge(15, 160)
        self.graph.add_edge(9, 54)
        self.graph.add_edge(120, 156)
        self.graph.add_edge(42, 10)
        self.graph.add_edge(45, 70)
        self.graph.add_edge(125, 58)
        self.graph.add_edge(119, 48)
        self.graph.add_edge(5, 76)
        self.graph.add_edge(31, 46)
        self.graph.add_edge(92, 8)
        self.graph.add_edge(39, 94)
        self.graph.add_edge(125, 22)
        self.graph.add_edge(115, 54)
        self.graph.add_edge(117, 124)
        self.graph.add_edge(162, 38)
        self.graph.add_edge(71, 90)
        self.graph.add_edge(10, 150)
        self.graph.add_edge(81, 94)
        self.graph.add_edge(87, 106)
        self.graph.add_edge(109, 136)
        self.graph.add_edge(150, 132)
        self.graph.add_edge(89, 134)
        self.graph.add_edge(142, 14)
        self.graph.add_edge(151, 164)
        self.graph.add_edge(111, 96)
        self.graph.add_edge(68, 56)
        self.graph.add_edge(142, 36)
        self.graph.add_edge(122, 164)
        self.graph.add_edge(150, 148)
        self.graph.add_edge(56, 6)
        self.graph.add_edge(49, 104)
        self.graph.add_edge(98, 32)
        self.graph.add_edge(147, 94)
        self.graph.add_edge(1, 80)
        self.graph.add_edge(58, 134)
        self.graph.add_edge(16, 8)
        self.graph.add_edge(30, 56)
        self.graph.add_edge(66, 144)
        self.graph.add_edge(143, 128)
        self.graph.add_edge(22, 94)
        self.graph.add_edge(98, 82)
        self.graph.add_edge(17, 26)
        self.graph.add_edge(35, 78)
        self.graph.add_edge(72, 80)
        self.graph.add_edge(142, 64)
        self.graph.add_edge(35, 18)
        self.graph.add_edge(122, 100)
        self.graph.add_edge(125, 24)
        self.graph.add_edge(143, 164)
        self.graph.add_edge(151, 52)
        self.graph.add_edge(142, 80)
        self.graph.add_edge(156, 1)
        self.graph.add_edge(117, 104)
        self.graph.add_edge(122, 30)
        self.graph.add_edge(132, 64)
        self.graph.add_edge(53, 26)
        self.graph.add_edge(2, 34)
        self.graph.add_edge(36, 160)
        self.graph.add_edge(158, 150)
        self.graph.add_edge(124, 8)
        self.graph.add_edge(54, 38)
        self.graph.add_edge(81, 44)
        self.graph.add_edge(137, 120)
        self.graph.add_edge(87, 138)
        self.graph.add_edge(126, 127)
        self.graph.add_edge(48, 134)
        self.graph.add_edge(104, 30)
        self.graph.add_edge(115, 70)
        self.graph.add_edge(63, 2)
        self.graph.add_edge(102, 92)
        self.graph.add_edge(90, 72)
        self.graph.add_edge(3, 72)
        self.graph.add_edge(58, 92)
        self.graph.add_edge(23, 108)
        self.graph.add_edge(90, 160)
        self.graph.add_edge(120, 138)
        self.graph.add_edge(83, 114)
        self.graph.add_edge(10, 52)
        self.graph.add_edge(144, 108)
        self.graph.add_edge(101, 114)
        self.graph.add_edge(108, 154)
        self.graph.add_edge(117, 96)
        self.graph.add_edge(14, 40)
        self.graph.add_edge(160, 48)
        self.graph.add_edge(95, 38)
        self.graph.add_edge(119, 36)
        self.graph.add_edge(151, 136)
        self.graph.add_edge(23, 74)
        self.graph.add_edge(65, 98)
        self.graph.add_edge(146, 78)
        self.graph.add_edge(71, 26)
        self.graph.add_edge(105, 92)
        self.graph.add_edge(145, 138)
        self.graph.add_edge(77, 10)
        self.graph.add_edge(24, 122)
        self.graph.add_edge(149, 48)
        self.graph.add_edge(23, 2)
        self.graph.add_edge(92, 134)
        self.graph.add_edge(103, 18)
        self.graph.add_edge(91, 96)
        self.graph.add_edge(11, 22)
        self.graph.add_edge(70, 152)
        self.graph.add_edge(96, 162)
        self.graph.add_edge(94, 88)
        self.graph.add_edge(75, 122)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(144, 52)
        self.graph.add_edge(145, 74)
        self.graph.add_edge(75, 38)
        self.graph.add_edge(152, 88)
        self.graph.add_edge(139, 132)
        self.graph.add_edge(78, 50)
        self.graph.add_edge(15, 60)
        self.graph.add_edge(131, 78)
        self.graph.add_edge(83, 22)
        self.graph.add_edge(72, 44)
        self.graph.add_edge(1, 126)
        self.graph.add_edge(120, 136)
        self.graph.add_edge(41, 42)
        self.graph.add_edge(82, 74)
        self.graph.add_edge(18, 19)
        self.graph.add_edge(155, 32)
        self.graph.add_edge(27, 144)
        self.graph.add_edge(155, 28)
        self.graph.add_edge(99, 40)
        self.graph.add_edge(32, 102)
        self.graph.add_edge(3, 162)
        self.graph.add_edge(81, 16)
        self.graph.add_edge(154, 108)
        self.graph.add_edge(5, 114)
        self.graph.add_edge(150, 10)
        self.graph.add_edge(131, 68)
        self.graph.add_edge(163, 90)
        self.graph.add_edge(50, 64)
        self.graph.add_edge(64, 158)
        self.graph.add_edge(31, 102)
        self.graph.add_edge(73, 38)
        self.graph.add_edge(83, 68)
        self.graph.add_edge(64, 14)
        self.graph.add_edge(87, 100)
        self.graph.add_edge(15, 36)
        self.graph.add_edge(137, 34)
        self.graph.add_edge(114, 42)
        self.graph.add_edge(61, 80)
        self.graph.add_edge(54, 62)
        self.graph.add_edge(99, 74)
        self.graph.add_edge(154, 28)
        self.graph.add_edge(133, 12)
        self.graph.add_edge(161, 86)
        self.graph.add_edge(79, 158)
        self.graph.add_edge(79, 82)
        self.graph.add_edge(10, 146)
        self.graph.add_edge(150, 48)
        self.graph.add_edge(72, 6)
        self.graph.add_edge(107, 92)
        self.graph.add_edge(88, 80)
        self.graph.add_edge(19, 8)
        self.graph.add_edge(162, 10)
        self.graph.add_edge(118, 58)
        self.graph.add_edge(99, 10)
        self.graph.add_edge(84, 94)
        self.graph.add_edge(59, 86)
        self.graph.add_edge(93, 84)
        return super().setUp()

    def test_case_15(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(), [
            18, 30, 24, -1, 24, 24, 18, 12, 24, 18, 24, 18, 30, 24, 24, 18, 30,
            24, 18, -1, 24, 18, 24, 18, 24, 24, 24, 18, -1, 18, 18, 18, -1, 30,
            18, 18, -1, 24, 12, 18, 6, 12, 30, 24, 12, 24, 24, 18, 30, 24, 24,
            18, 30, 18, -1, 24, 24, 12, 30, 24, 18, 24, 24, 24, 30, 24, 18, 30,
            -1, 6, 24, 18, 24, 30, 18, 30, 24, 24, 18, 12, 18, 24, 24, 18, -1,
            30, 24, 6, 18, 18, 30, 6, 24, 12, 30, 24, 24, 24, 24, 18, 24, 12,
            18, 24, 12, 24, 12, 18, 24, 18, 30, 30, 24, 18, 12, 12, 24, 18, 24,
            30, 30, 12, 24, 18, 18, 24, 30, 24, -1, 18, 30, 18, 24, 12, -1, 24,
            30, 24, 24, 24, -1, 18, 18, 24, 30, 24, 18, 24, 24, 18, 24, -1, 24,
            24, 24, 36, 24, 18, 24, 30, 18, 24, 18, 30
        ])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
Пример #8
0
    if all(visited):
        return True
    else:
        return False


def find_mother_vortex(g: Graph):
    for i in range(g.vertices):
        visited = [False] * g.vertices
        if find_mother_vortex_helper(g, i, visited):
            return i
    return -1


g = Graph(4)
g.add_edge(3, 0)
g.add_edge(0, 1)
g.add_edge(1, 2)
g.add_edge(3, 1)
print(find_mother_vortex(g))

g1 = Graph(3)
g1.add_edge(0, 1)
g1.add_edge(1, 2)
g1.add_edge(2, 0)

print(find_mother_vortex(g1))
g2 = Graph(4)
g2.add_edge(0, 1)
g2.add_edge(2, 3)
Пример #9
0
class TestBFS_Case_18(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 40
        self.graph = Graph(self.START)
        self.graph.add_edge(54, 455)
        self.graph.add_edge(30, 4)
        self.graph.add_edge(30, 37)
        self.graph.add_edge(30, 53)
        self.graph.add_edge(50, 26)
        self.graph.add_edge(45, 11)
        self.graph.add_edge(30, 4)
        self.graph.add_edge(40, 28)
        self.graph.add_edge(10, 9)
        self.graph.add_edge(5, 50)
        self.graph.add_edge(50, 34)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(15, 36)
        self.graph.add_edge(30, 20)
        self.graph.add_edge(35, 54)
        self.graph.add_edge(45, 25)
        self.graph.add_edge(30, 22)
        self.graph.add_edge(10, 50)
        self.graph.add_edge(25, 43)
        self.graph.add_edge(50, 21)
        self.graph.add_edge(5, 46)
        self.graph.add_edge(5, 23)
        self.graph.add_edge(35, 16)
        self.graph.add_edge(40, 41)
        self.graph.add_edge(15, 7)
        self.graph.add_edge(30, 4)
        self.graph.add_edge(15, 4)
        self.graph.add_edge(5, 38)
        self.graph.add_edge(40, 13)
        self.graph.add_edge(35, 36)
        self.graph.add_edge(15, 35)
        self.graph.add_edge(35, 33)
        self.graph.add_edge(30, 9)
        self.graph.add_edge(45, 2)
        self.graph.add_edge(35, 23)
        self.graph.add_edge(25, 35)
        self.graph.add_edge(15, 1)
        self.graph.add_edge(15, 54)
        self.graph.add_edge(40, 27)
        self.graph.add_edge(20, 16)
        self.graph.add_edge(20, 53)
        self.graph.add_edge(45, 44)
        self.graph.add_edge(15, 40)
        self.graph.add_edge(30, 22)
        self.graph.add_edge(50, 10)
        self.graph.add_edge(1, 50)
        self.graph.add_edge(45, 1)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(40, 32)
        self.graph.add_edge(30, 10)
        self.graph.add_edge(20, 36)
        self.graph.add_edge(5, 16)
        self.graph.add_edge(50, 34)
        self.graph.add_edge(30, 24)
        self.graph.add_edge(35, 30)
        self.graph.add_edge(30, 10)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(15, 18)
        self.graph.add_edge(30, 18)
        self.graph.add_edge(10, 11)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(50, 12)
        self.graph.add_edge(40, 44)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(40, 52)
        self.graph.add_edge(30, 48)
        self.graph.add_edge(20, 45)
        self.graph.add_edge(40, 8)
        self.graph.add_edge(5, 15)
        self.graph.add_edge(25, 20)
        self.graph.add_edge(45, 46)
        self.graph.add_edge(15, 35)
        self.graph.add_edge(20, 28)
        self.graph.add_edge(25, 36)
        self.graph.add_edge(40, 4)
        self.graph.add_edge(15, 2)
        self.graph.add_edge(15, 47)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(25, 54)
        self.graph.add_edge(50, 19)
        self.graph.add_edge(35, 12)
        self.graph.add_edge(35, 23)
        self.graph.add_edge(45, 20)
        self.graph.add_edge(40, 16)
        self.graph.add_edge(5, 27)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(35, 18)
        self.graph.add_edge(50, 17)
        self.graph.add_edge(1, 47)
        self.graph.add_edge(50, 14)
        self.graph.add_edge(30, 39)
        self.graph.add_edge(10, 37)
        self.graph.add_edge(10, 2)
        self.graph.add_edge(25, 27)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(40, 37)
        self.graph.add_edge(35, 20)
        self.graph.add_edge(10, 18)
        self.graph.add_edge(15, 14)
        self.graph.add_edge(40, 51)
        self.graph.add_edge(30, 44)
        self.graph.add_edge(5, 15)
        self.graph.add_edge(40, 26)
        self.graph.add_edge(25, 41)
        self.graph.add_edge(20, 6)
        self.graph.add_edge(40, 9)
        self.graph.add_edge(35, 52)
        self.graph.add_edge(40, 25)
        self.graph.add_edge(1, 52)
        self.graph.add_edge(15, 41)
        self.graph.add_edge(20, 51)
        self.graph.add_edge(30, 26)
        self.graph.add_edge(30, 34)
        self.graph.add_edge(15, 21)
        self.graph.add_edge(30, 31)
        self.graph.add_edge(25, 52)
        self.graph.add_edge(30, 54)
        self.graph.add_edge(30, 2)
        self.graph.add_edge(20, 43)
        self.graph.add_edge(5, 3)
        self.graph.add_edge(25, 21)
        self.graph.add_edge(50, 47)
        self.graph.add_edge(5, 35)
        self.graph.add_edge(40, 13)
        self.graph.add_edge(30, 33)
        self.graph.add_edge(5, 24)
        self.graph.add_edge(25, 54)
        self.graph.add_edge(50, 19)
        self.graph.add_edge(50, 25)
        self.graph.add_edge(35, 12)
        self.graph.add_edge(1, 26)
        self.graph.add_edge(50, 4)
        self.graph.add_edge(50, 44)
        self.graph.add_edge(35, 54)
        self.graph.add_edge(5, 51)
        self.graph.add_edge(20, 4)
        self.graph.add_edge(50, 18)
        self.graph.add_edge(10, 52)
        self.graph.add_edge(10, 54)
        self.graph.add_edge(20, 31)
        self.graph.add_edge(50, 2)
        self.graph.add_edge(45, 52)
        self.graph.add_edge(45, 27)
        self.graph.add_edge(45, 33)
        self.graph.add_edge(35, 14)
        self.graph.add_edge(25, 11)
        self.graph.add_edge(10, 32)
        self.graph.add_edge(10, 21)
        self.graph.add_edge(40, 1)
        self.graph.add_edge(20, 18)
        self.graph.add_edge(50, 32)
        self.graph.add_edge(5, 17)
        self.graph.add_edge(5, 11)
        self.graph.add_edge(15, 10)
        self.graph.add_edge(1, 50)
        self.graph.add_edge(10, 27)
        self.graph.add_edge(50, 10)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(10, 44)
        self.graph.add_edge(10, 49)
        self.graph.add_edge(50, 31)
        self.graph.add_edge(40, 22)
        self.graph.add_edge(5, 46)
        self.graph.add_edge(15, 1)
        self.graph.add_edge(20, 17)
        self.graph.add_edge(50, 22)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(40, 4)
        self.graph.add_edge(40, 38)
        self.graph.add_edge(45, 20)
        self.graph.add_edge(30, 42)
        self.graph.add_edge(15, 32)
        self.graph.add_edge(25, 31)
        self.graph.add_edge(25, 8)
        self.graph.add_edge(20, 43)
        self.graph.add_edge(40, 42)
        self.graph.add_edge(45, 35)
        self.graph.add_edge(15, 34)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(35, 4)
        self.graph.add_edge(25, 49)
        self.graph.add_edge(25, 3)
        self.graph.add_edge(50, 27)
        self.graph.add_edge(15, 35)
        self.graph.add_edge(20, 2)
        self.graph.add_edge(50, 22)
        self.graph.add_edge(30, 32)
        self.graph.add_edge(20, 41)
        self.graph.add_edge(25, 46)
        self.graph.add_edge(40, 49)
        self.graph.add_edge(5, 37)
        self.graph.add_edge(15, 47)
        self.graph.add_edge(20, 24)
        self.graph.add_edge(40, 39)
        self.graph.add_edge(40, 38)
        self.graph.add_edge(40, 7)
        self.graph.add_edge(50, 22)
        self.graph.add_edge(5, 20)
        self.graph.add_edge(15, 23)
        self.graph.add_edge(20, 27)
        self.graph.add_edge(20, 13)
        self.graph.add_edge(10, 54)
        self.graph.add_edge(45, 46)
        self.graph.add_edge(40, 7)
        self.graph.add_edge(5, 37)
        self.graph.add_edge(30, 42)
        self.graph.add_edge(15, 37)
        self.graph.add_edge(25, 31)
        self.graph.add_edge(40, 37)
        self.graph.add_edge(50, 37)
        self.graph.add_edge(35, 30)
        self.graph.add_edge(50, 24)
        self.graph.add_edge(40, 41)
        self.graph.add_edge(50, 34)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(50, 32)
        self.graph.add_edge(45, 22)
        self.graph.add_edge(35, 10)
        self.graph.add_edge(30, 36)
        self.graph.add_edge(40, 13)
        self.graph.add_edge(15, 10)
        self.graph.add_edge(15, 4)
        self.graph.add_edge(25, 49)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(50, 44)
        self.graph.add_edge(15, 44)
        self.graph.add_edge(30, 35)
        self.graph.add_edge(15, 33)
        self.graph.add_edge(15, 17)
        self.graph.add_edge(25, 41)
        self.graph.add_edge(15, 11)
        self.graph.add_edge(25, 22)
        self.graph.add_edge(45, 37)
        self.graph.add_edge(1, 39)
        self.graph.add_edge(35, 34)
        self.graph.add_edge(45, 13)
        self.graph.add_edge(30, 42)
        self.graph.add_edge(35, 31)
        self.graph.add_edge(45, 36)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(50, 14)
        self.graph.add_edge(5, 38)
        self.graph.add_edge(35, 16)
        self.graph.add_edge(50, 31)
        self.graph.add_edge(35, 36)
        self.graph.add_edge(40, 43)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(45, 5)
        self.graph.add_edge(30, 26)
        self.graph.add_edge(30, 27)
        self.graph.add_edge(45, 44)
        self.graph.add_edge(15, 3)
        self.graph.add_edge(20, 37)
        self.graph.add_edge(10, 22)
        self.graph.add_edge(25, 1)
        self.graph.add_edge(20, 8)
        self.graph.add_edge(30, 1)
        self.graph.add_edge(5, 26)
        self.graph.add_edge(40, 31)
        self.graph.add_edge(45, 48)
        self.graph.add_edge(40, 17)
        self.graph.add_edge(10, 51)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(30, 9)
        self.graph.add_edge(50, 13)
        self.graph.add_edge(35, 22)
        self.graph.add_edge(30, 25)
        self.graph.add_edge(15, 16)
        self.graph.add_edge(1, 10)
        self.graph.add_edge(30, 42)
        self.graph.add_edge(45, 12)
        self.graph.add_edge(45, 39)
        self.graph.add_edge(20, 37)
        self.graph.add_edge(20, 51)
        self.graph.add_edge(20, 5)
        self.graph.add_edge(15, 46)
        self.graph.add_edge(35, 22)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(35, 38)
        self.graph.add_edge(5, 20)
        self.graph.add_edge(35, 40)
        self.graph.add_edge(25, 21)
        self.graph.add_edge(20, 22)
        self.graph.add_edge(40, 3)
        self.graph.add_edge(40, 38)
        self.graph.add_edge(10, 31)
        self.graph.add_edge(20, 44)
        self.graph.add_edge(25, 22)
        self.graph.add_edge(50, 13)
        self.graph.add_edge(30, 1)
        self.graph.add_edge(35, 25)
        self.graph.add_edge(50, 38)
        self.graph.add_edge(10, 38)
        self.graph.add_edge(30, 13)
        self.graph.add_edge(30, 48)
        self.graph.add_edge(5, 34)
        self.graph.add_edge(50, 14)
        self.graph.add_edge(30, 41)
        self.graph.add_edge(1, 10)
        self.graph.add_edge(40, 20)
        self.graph.add_edge(35, 11)
        self.graph.add_edge(20, 14)
        self.graph.add_edge(30, 49)
        self.graph.add_edge(50, 38)
        self.graph.add_edge(45, 3)
        self.graph.add_edge(25, 50)
        self.graph.add_edge(20, 45)
        self.graph.add_edge(50, 31)
        self.graph.add_edge(50, 12)
        self.graph.add_edge(10, 37)
        self.graph.add_edge(25, 8)
        self.graph.add_edge(30, 38)
        self.graph.add_edge(25, 17)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(45, 51)
        self.graph.add_edge(5, 53)
        self.graph.add_edge(20, 8)
        self.graph.add_edge(45, 42)
        self.graph.add_edge(5, 33)
        self.graph.add_edge(40, 23)
        self.graph.add_edge(40, 24)
        self.graph.add_edge(35, 44)
        self.graph.add_edge(40, 36)
        self.graph.add_edge(35, 14)
        self.graph.add_edge(10, 15)
        self.graph.add_edge(40, 5)
        self.graph.add_edge(40, 39)
        self.graph.add_edge(25, 52)
        self.graph.add_edge(45, 19)
        self.graph.add_edge(30, 52)
        self.graph.add_edge(45, 50)
        self.graph.add_edge(35, 34)
        self.graph.add_edge(10, 28)
        self.graph.add_edge(50, 39)
        self.graph.add_edge(45, 30)
        self.graph.add_edge(40, 36)
        self.graph.add_edge(30, 2)
        self.graph.add_edge(45, 5)
        self.graph.add_edge(30, 2)
        self.graph.add_edge(25, 18)
        self.graph.add_edge(35, 47)
        self.graph.add_edge(10, 33)
        self.graph.add_edge(50, 36)
        self.graph.add_edge(25, 51)
        self.graph.add_edge(30, 17)
        self.graph.add_edge(10, 27)
        self.graph.add_edge(35, 53)
        self.graph.add_edge(20, 42)
        self.graph.add_edge(45, 2)
        self.graph.add_edge(30, 2)
        self.graph.add_edge(10, 50)
        self.graph.add_edge(30, 47)
        self.graph.add_edge(35, 40)
        self.graph.add_edge(40, 52)
        self.graph.add_edge(45, 42)
        self.graph.add_edge(45, 34)
        self.graph.add_edge(10, 7)
        self.graph.add_edge(15, 20)
        self.graph.add_edge(50, 4)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(25, 23)
        self.graph.add_edge(35, 42)
        self.graph.add_edge(35, 16)
        self.graph.add_edge(50, 19)
        self.graph.add_edge(35, 43)
        self.graph.add_edge(15, 12)
        self.graph.add_edge(20, 14)
        self.graph.add_edge(40, 16)
        self.graph.add_edge(30, 11)
        self.graph.add_edge(30, 33)
        self.graph.add_edge(50, 44)
        self.graph.add_edge(30, 3)
        self.graph.add_edge(40, 32)
        self.graph.add_edge(25, 51)
        self.graph.add_edge(30, 32)
        self.graph.add_edge(25, 39)
        self.graph.add_edge(45, 50)
        self.graph.add_edge(40, 51)
        self.graph.add_edge(40, 33)
        self.graph.add_edge(15, 44)
        self.graph.add_edge(45, 46)
        self.graph.add_edge(10, 22)
        self.graph.add_edge(45, 17)
        self.graph.add_edge(35, 33)
        self.graph.add_edge(50, 5)
        self.graph.add_edge(20, 11)
        self.graph.add_edge(20, 37)
        self.graph.add_edge(45, 27)
        self.graph.add_edge(10, 29)
        self.graph.add_edge(5, 26)
        self.graph.add_edge(5, 32)
        self.graph.add_edge(20, 38)
        self.graph.add_edge(5, 17)
        self.graph.add_edge(5, 20)
        self.graph.add_edge(30, 13)
        self.graph.add_edge(1, 5)
        self.graph.add_edge(20, 51)
        self.graph.add_edge(40, 12)
        self.graph.add_edge(1, 51)
        self.graph.add_edge(50, 7)
        self.graph.add_edge(30, 21)
        self.graph.add_edge(15, 37)
        self.graph.add_edge(20, 3)
        self.graph.add_edge(45, 39)
        self.graph.add_edge(5, 10)
        self.graph.add_edge(45, 30)
        self.graph.add_edge(20, 33)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(45, 53)
        self.graph.add_edge(5, 12)
        self.graph.add_edge(45, 12)
        self.graph.add_edge(1, 5)
        self.graph.add_edge(25, 16)
        self.graph.add_edge(10, 6)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(45, 29)
        self.graph.add_edge(50, 1)
        self.graph.add_edge(20, 29)
        self.graph.add_edge(25, 43)
        self.graph.add_edge(50, 8)
        self.graph.add_edge(35, 19)
        self.graph.add_edge(40, 28)
        self.graph.add_edge(50, 41)
        self.graph.add_edge(10, 19)
        self.graph.add_edge(25, 30)
        self.graph.add_edge(25, 47)
        self.graph.add_edge(25, 10)
        self.graph.add_edge(15, 53)
        self.graph.add_edge(20, 1)
        self.graph.add_edge(25, 48)
        self.graph.add_edge(30, 37)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(30, 7)
        self.graph.add_edge(5, 3)
        self.graph.add_edge(10, 14)
        self.graph.add_edge(25, 33)
        self.graph.add_edge(35, 38)
        self.graph.add_edge(45, 8)
        self.graph.add_edge(35, 16)
        self.graph.add_edge(30, 34)
        self.graph.add_edge(10, 49)
        self.graph.add_edge(25, 40)
        self.graph.add_edge(15, 48)
        self.graph.add_edge(35, 41)
        self.graph.add_edge(35, 29)
        self.graph.add_edge(35, 29)
        self.graph.add_edge(10, 18)
        self.graph.add_edge(5, 19)
        self.graph.add_edge(5, 6)
        self.graph.add_edge(40, 2)
        self.graph.add_edge(5, 33)
        self.graph.add_edge(40, 29)
        self.graph.add_edge(20, 22)
        self.graph.add_edge(5, 6)
        return super().setUp()

    def test_case_18(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(), [
            6, 6, 6, 6, 6, 12, 6, 6, 6, 12, 12, 6, 6, 12, 6, 6, 6, 12, 12, 6,
            12, 6, 6, 6, 6, 6, 6, 6, 6, 12, 6, 6, 6, 12, 6, 6, 6, 6, 6, 6, 6,
            6, 6, 12, 12, 12, 12, 6, 12, 6, 6, 12, 12
        ])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
Пример #10
0
class TestBFS_Case_19(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 1
        self.graph = Graph(self.START)
        self.graph.add_edge(28, 254)
        self.graph.add_edge(7, 3)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(14, 5)
        self.graph.add_edge(16, 18)
        self.graph.add_edge(6, 27)
        self.graph.add_edge(2, 28)
        self.graph.add_edge(28, 1)
        self.graph.add_edge(13, 2)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(18, 19)
        self.graph.add_edge(7, 25)
        self.graph.add_edge(14, 21)
        self.graph.add_edge(7, 25)
        self.graph.add_edge(25, 18)
        self.graph.add_edge(27, 28)
        self.graph.add_edge(14, 28)
        self.graph.add_edge(7, 3)
        self.graph.add_edge(23, 5)
        self.graph.add_edge(19, 23)
        self.graph.add_edge(20, 23)
        self.graph.add_edge(20, 28)
        self.graph.add_edge(9, 24)
        self.graph.add_edge(7, 25)
        self.graph.add_edge(15, 27)
        self.graph.add_edge(25, 24)
        self.graph.add_edge(2, 14)
        self.graph.add_edge(13, 23)
        self.graph.add_edge(20, 4)
        self.graph.add_edge(6, 1)
        self.graph.add_edge(7, 22)
        self.graph.add_edge(15, 21)
        self.graph.add_edge(2, 16)
        self.graph.add_edge(22, 16)
        self.graph.add_edge(25, 6)
        self.graph.add_edge(13, 4)
        self.graph.add_edge(14, 2)
        self.graph.add_edge(15, 1)
        self.graph.add_edge(7, 11)
        self.graph.add_edge(23, 3)
        self.graph.add_edge(4, 1)
        self.graph.add_edge(28, 23)
        self.graph.add_edge(6, 1)
        self.graph.add_edge(5, 19)
        self.graph.add_edge(28, 27)
        self.graph.add_edge(19, 14)
        self.graph.add_edge(5, 1)
        self.graph.add_edge(23, 10)
        self.graph.add_edge(28, 1)
        self.graph.add_edge(7, 22)
        self.graph.add_edge(3, 27)
        self.graph.add_edge(12, 2)
        self.graph.add_edge(27, 23)
        self.graph.add_edge(22, 23)
        self.graph.add_edge(18, 24)
        self.graph.add_edge(3, 21)
        self.graph.add_edge(17, 22)
        self.graph.add_edge(8, 27)
        self.graph.add_edge(27, 14)
        self.graph.add_edge(21, 19)
        self.graph.add_edge(10, 17)
        self.graph.add_edge(14, 9)
        self.graph.add_edge(10, 15)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(3, 5)
        self.graph.add_edge(27, 11)
        self.graph.add_edge(28, 5)
        self.graph.add_edge(8, 15)
        self.graph.add_edge(1, 9)
        self.graph.add_edge(11, 17)
        self.graph.add_edge(11, 1)
        self.graph.add_edge(14, 20)
        self.graph.add_edge(4, 5)
        self.graph.add_edge(12, 24)
        self.graph.add_edge(13, 15)
        self.graph.add_edge(3, 22)
        self.graph.add_edge(21, 1)
        self.graph.add_edge(25, 15)
        self.graph.add_edge(22, 26)
        self.graph.add_edge(1, 14)
        self.graph.add_edge(23, 3)
        self.graph.add_edge(15, 12)
        self.graph.add_edge(19, 13)
        self.graph.add_edge(6, 2)
        self.graph.add_edge(10, 20)
        self.graph.add_edge(24, 22)
        self.graph.add_edge(26, 9)
        self.graph.add_edge(26, 28)
        self.graph.add_edge(13, 26)
        self.graph.add_edge(28, 17)
        self.graph.add_edge(13, 17)
        self.graph.add_edge(12, 23)
        self.graph.add_edge(2, 12)
        self.graph.add_edge(18, 24)
        self.graph.add_edge(12, 28)
        self.graph.add_edge(9, 7)
        self.graph.add_edge(6, 16)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(27, 1)
        self.graph.add_edge(5, 1)
        self.graph.add_edge(23, 11)
        self.graph.add_edge(27, 23)
        self.graph.add_edge(28, 7)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(10, 8)
        self.graph.add_edge(1, 20)
        self.graph.add_edge(2, 19)
        self.graph.add_edge(10, 5)
        self.graph.add_edge(24, 17)
        self.graph.add_edge(25, 12)
        self.graph.add_edge(21, 28)
        self.graph.add_edge(8, 23)
        self.graph.add_edge(15, 28)
        self.graph.add_edge(5, 19)
        self.graph.add_edge(5, 16)
        self.graph.add_edge(17, 11)
        self.graph.add_edge(5, 18)
        self.graph.add_edge(20, 21)
        self.graph.add_edge(8, 1)
        self.graph.add_edge(3, 9)
        self.graph.add_edge(1, 26)
        self.graph.add_edge(17, 20)
        self.graph.add_edge(20, 4)
        self.graph.add_edge(5, 17)
        self.graph.add_edge(15, 17)
        self.graph.add_edge(28, 5)
        self.graph.add_edge(20, 25)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(28, 1)
        self.graph.add_edge(17, 7)
        self.graph.add_edge(2, 20)
        self.graph.add_edge(17, 25)
        self.graph.add_edge(8, 16)
        self.graph.add_edge(9, 16)
        self.graph.add_edge(27, 4)
        self.graph.add_edge(8, 14)
        self.graph.add_edge(6, 14)
        self.graph.add_edge(8, 28)
        self.graph.add_edge(27, 28)
        self.graph.add_edge(26, 11)
        self.graph.add_edge(17, 27)
        self.graph.add_edge(17, 26)
        self.graph.add_edge(12, 25)
        self.graph.add_edge(22, 6)
        self.graph.add_edge(26, 18)
        self.graph.add_edge(15, 19)
        self.graph.add_edge(16, 8)
        self.graph.add_edge(19, 3)
        self.graph.add_edge(28, 1)
        self.graph.add_edge(26, 9)
        self.graph.add_edge(21, 13)
        self.graph.add_edge(2, 21)
        self.graph.add_edge(2, 1)
        self.graph.add_edge(16, 13)
        self.graph.add_edge(3, 9)
        self.graph.add_edge(1, 5)
        self.graph.add_edge(14, 16)
        self.graph.add_edge(12, 13)
        self.graph.add_edge(18, 23)
        self.graph.add_edge(18, 26)
        self.graph.add_edge(12, 8)
        self.graph.add_edge(5, 1)
        self.graph.add_edge(27, 25)
        self.graph.add_edge(3, 14)
        self.graph.add_edge(24, 9)
        self.graph.add_edge(8, 21)
        self.graph.add_edge(2, 9)
        self.graph.add_edge(8, 26)
        self.graph.add_edge(27, 28)
        self.graph.add_edge(2, 12)
        self.graph.add_edge(2, 3)
        self.graph.add_edge(24, 5)
        self.graph.add_edge(6, 11)
        self.graph.add_edge(10, 5)
        self.graph.add_edge(14, 15)
        self.graph.add_edge(12, 18)
        self.graph.add_edge(25, 1)
        self.graph.add_edge(10, 7)
        self.graph.add_edge(13, 28)
        self.graph.add_edge(28, 15)
        self.graph.add_edge(28, 21)
        self.graph.add_edge(5, 12)
        self.graph.add_edge(11, 15)
        self.graph.add_edge(8, 20)
        self.graph.add_edge(23, 4)
        self.graph.add_edge(17, 22)
        self.graph.add_edge(13, 6)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(20, 15)
        self.graph.add_edge(9, 12)
        self.graph.add_edge(26, 7)
        self.graph.add_edge(2, 18)
        self.graph.add_edge(6, 25)
        self.graph.add_edge(7, 4)
        self.graph.add_edge(6, 22)
        self.graph.add_edge(25, 23)
        self.graph.add_edge(8, 13)
        self.graph.add_edge(28, 22)
        self.graph.add_edge(18, 24)
        self.graph.add_edge(12, 5)
        self.graph.add_edge(8, 4)
        self.graph.add_edge(27, 26)
        self.graph.add_edge(19, 25)
        self.graph.add_edge(22, 23)
        self.graph.add_edge(9, 15)
        self.graph.add_edge(4, 6)
        self.graph.add_edge(28, 22)
        self.graph.add_edge(23, 6)
        self.graph.add_edge(21, 13)
        self.graph.add_edge(8, 23)
        self.graph.add_edge(2, 19)
        self.graph.add_edge(11, 28)
        self.graph.add_edge(21, 26)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(4, 13)
        self.graph.add_edge(22, 13)
        self.graph.add_edge(18, 21)
        self.graph.add_edge(1, 10)
        self.graph.add_edge(5, 6)
        self.graph.add_edge(22, 14)
        self.graph.add_edge(7, 20)
        self.graph.add_edge(18, 14)
        self.graph.add_edge(26, 1)
        self.graph.add_edge(2, 16)
        self.graph.add_edge(9, 19)
        self.graph.add_edge(13, 4)
        self.graph.add_edge(22, 1)
        self.graph.add_edge(11, 15)
        self.graph.add_edge(15, 6)
        self.graph.add_edge(6, 15)
        self.graph.add_edge(13, 16)
        self.graph.add_edge(24, 6)
        self.graph.add_edge(11, 12)
        self.graph.add_edge(14, 27)
        self.graph.add_edge(12, 23)
        self.graph.add_edge(20, 8)
        self.graph.add_edge(10, 13)
        self.graph.add_edge(26, 28)
        self.graph.add_edge(26, 17)
        self.graph.add_edge(26, 4)
        self.graph.add_edge(14, 17)
        self.graph.add_edge(25, 20)
        self.graph.add_edge(11, 20)
        self.graph.add_edge(20, 8)
        self.graph.add_edge(5, 6)
        self.graph.add_edge(5, 19)
        self.graph.add_edge(24, 1)
        self.graph.add_edge(18, 6)
        self.graph.add_edge(12, 11)
        self.graph.add_edge(20, 10)
        self.graph.add_edge(3, 5)
        self.graph.add_edge(27, 14)
        self.graph.add_edge(5, 1)
        self.graph.add_edge(27, 21)
        self.graph.add_edge(27, 25)
        return super().setUp()

    def test_case_19(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(),[6, 12, 6, 6, 6, 12, 6, 6, 6, 6, 12, 6, 6, 6, 6, 12, 6, 12, 6, 6, 6, 12, 6, 6, 6, 6, 6])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
Пример #11
0
class TestBreadthFirstSearch(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 1
        self.graph = Graph(self.START)
        self.graph.add_edge(4, 2)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 3)
        return super().setUp()

    def test_node_quantity_input(self):
        self.assertEqual(self.graph.get_qtd_nodes(), 4)

    def test_node_start_input(self):
        self.assertEqual(self.graph.get_start(), self.START)

    def test_add_edges(self):
        self.assertEqual(list(self.graph.get_nodes().keys()), [4, 1])

    def test_get_origin_nodes(self):
        self.assertEqual(set(self.graph.get_origin_nodes()), set([1,4]))

    def test_get_all_destination_nodes(self):
        self.assertEqual(self.graph.get_all_destination_nodes(), set([2,3]))

    def test_get_destination_nodes(self):
        self.assertEqual(self.graph.get_destination_nodes(1), [2,3])
        
    def test_node_not_origin(self):
        self.assertEqual(self.graph._node_not_origin(5), True)

    def test_node_not_destination(self):
        self.assertEqual(self.graph._node_not_destination(4), True)

    def test_last_path_node(self):
        self.assertEqual(self.graph.check_if_last_path_node(2), True)

    # def test_node_path(self):
    #     self.assertEqual(self.graph.get_node_paths(1),[[2],[3,5]])

    # def test_all_paths(self):
    #     self.assertEqual(self.graph.get_all_paths(),[[],[[2],[3,5]],[[5]],[[2]],[]])

    # def test_node_cost(self):
    #     self.assertEqual(self.graph.get_node_cost(5), 12)

    def test_all_cost(self):
        self.graph.get_all_paths()
        self.assertEqual(self.graph.get_costs(),  [6, 6, -1])

    # def test_add_node(self):
    #     """
    #     Test the graph nodes input
    #     1
    #     3 1
    #     2 3
    #     2
    #     """

    # def test_path_cost(self):
    #     """
    #     6 6 -1
    #     -1 6
    #     """

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
Пример #12
0
        self._graph = graph
        self._colors = dict()
        self._marked = dict()
        self._flage = True
        for v in graph.vertexes():
            if self._marked.get(v) is not True:
                self._colors[v] = True
                self._search(v)

    def _search(self, vertex):
        self._marked[vertex] = True
        for v in self._graph.adj(vertex):
            if self._marked.get(v) is not True:
                self._colors[v] = not self._colors[vertex]
                self._search(v)
            elif self._colors[vertex] == self._colors[v]:
                self._flage = False

    def is_two_color(self):
        return self._flage


if __name__ == '__main__':
    g = Graph()
    g.add_edge(1, 2)
    g.add_edge(2, 3)
    g.add_edge(4, 3)
    g.add_edge(4, 1)
    c = TwoColor(g)
    print(c.is_two_color())
Пример #13
0
    if (rec_node_stack[node]):
        return True

    # It has been visited before this recursion
    if (visited[node]):
        return False
    # Mark current node as visited and
    # add to recursion stack
    visited[node] = True
    rec_node_stack[node] = True

    head_node = g.array[node].head_node
    while(head_node is not None):
        # Pick adjacent node and call it recursively
        adjacent = head_node.data
        # If the node is visited again in the same recursion => Cycle found
        if (detect_cycle_rec(g, adjacent, visited, rec_node_stack)):
            return True
        head_node = head_node.next_element

    # remove the node from the recursive call
    rec_node_stack[node] = False
    return False


g1 = Graph(4)
g1.add_edge(0, 1)
g1.add_edge(0, 2)
g1.add_edge(2, 3)

print(detect_cycle(g1))
            if visited[temp.data] is False:
                q.enqueue(temp.data)
                visited[temp.data] = True
            elif visited[temp.data] is True and source != current_node:
                return True
            temp = temp.next_element
    return False


def detect_cycle(g: Graph):
    num_vertices = g.vertices

    if num_vertices is 0:
        return True

    for i in range(num_vertices):
        outcome = bfs_helper(g, i)
        if outcome is True:
            print('cycle exists')
            return outcome
    return outcome


g = Graph(4)

g.add_edge(0, 1)
g.add_edge(0, 3)
g.add_edge(3, 2)
g.add_edge(2, 0)

print(detect_cycle(g))
Пример #15
0
class AnalysisModel:
    START_EQN_NUM = 0
    START_VERTEX_NUM = 0

    def __init__(self):

        self.FEs = {}
        self.DOFs = {}

        self.domain = None
        self.handler = None

        self.DOF_graph = None  # 两者有什么区别????????一个是优化,一个没优化
        self.group_graph = None

        self.num_FE_Ele = 0  # number of FE_Elements objects added
        self.num_DOF_Grp = 0  # number of DOF_Group objects added
        self.num_eqn = 0  # num_eqn set by the ConstraintHandler typically

    # methods to populate/depopulate the AnalysisModel
    def add_FE_element(self, FE_Ele):
        # check we don't add a null pointer or this is a subclass trying to use this method when it should'nt
        if FE_Ele is None or self.get_FEs == {}:
            return False
        # check if an Element with a similar tag already exists in the Domain
        tag = FE_Ele.get_tag()
        other = self.FEs.get(tag)
        if other is not None:
            print('AnalysisModel::add_FE_element - fe_element with tag ' +
                  str(tag) + ' already exists in model.\n')
            return False
        # add
        self.FEs[tag] = FE_Ele
        FE_Ele.set_analysis_model(self)
        self.num_FE_Ele += 1
        return True

    def add_DOF_group(self, theDOF_Grp):
        # check we don't add a null pointer or this is a subclass trying to use a method it should'nt be using
        if theDOF_Grp is None:
            return False

        # check if a DOF_Group with a similar tag already exists in the Model
        tag = theDOF_Grp.get_tag()
        other = self.DOFs.get(tag)
        if other is not None:
            print('AnalysisModel::add_DOF_group - dof_group with tag ' +
                  str(tag) + ' already exists in model.\n')
            return False
        # add
        self.DOFs[tag] = theDOF_Grp
        self.num_DOF_Grp += 1
        return True

    def clear_all(self):
        self.FEs = {}
        self.DOFs = {}

        self.DOF_graph = None
        self.group_graph = None

        self.num_FE_Ele = 0
        self.num_DOF_Grp = 0
        self.num_eqn = 0

    def clear_DOF_graph(self):
        self.DOF_graph = None

    # def clearDOFGroupGraph(self):
    #     self.group_graph = None

    # methods to access the FE_Elements and DOF_Groups and their numbers
    def get_num_DOF_groups(self):
        return self.num_DOF_Grp

    def get_DOF_group(self, tag):
        return self.DOFs.get(tag)

    def get_FEs(self):
        return self.FEs

    def get_DOFs(self):
        return self.DOFs

    # methods to access the connectivity for SysOfEqn to size itself
    def set_num_eqn(self, theNumEqn):
        self.num_eqn = theNumEqn

    def get_num_eqn(self):
        return self.num_eqn

    def get_DOF_graph(self):
        if self.DOF_graph is None:
            numVertex = self.get_num_DOF_groups()
            graphStorage = {}
            self.DOF_graph = Graph(graphStorage)

            # create a vertex for each dof
            DOFs = self.get_DOFs()
            for tag in DOFs:
                dof = DOFs[tag]
                id1 = dof.get_ID()
                size = len(id1)
                for i in range(0, size):
                    dofTag = id1[i]
                    if dofTag >= AnalysisModel.START_EQN_NUM:
                        vertex = self.DOF_graph.get_vertex(dofTag)
                        if vertex is None:
                            vertex = Vertex(dofTag, dofTag)
                            if self.DOF_graph.add_vertex(vertex,
                                                         False) == False:
                                print(
                                    'WARNING AnalysisModel::get_DOF_graph - error adding vertex.\n'
                                )
                                return self.DOF_graph
            # now add the edges, by looping over the FE_elements, getting their IDs and adding edges between DOFs for equation numbers >= START_EQN_NUM
            FEs = self.get_FEs()
            cnt = 0
            for tag in FEs:
                ele = FEs[tag]
                id1 = ele.get_ID()
                cnt += 1
                size = len(id1)
                for i in range(0, size):
                    eqn1 = id1[i]
                    # if eqnNum of DOF is a valid eqn number add an edge to all other DOFs with valid eqn numbers.
                    if eqn1 >= AnalysisModel.START_EQN_NUM:
                        for j in range(i + 1, size):
                            eqn2 = id1[j]
                            if eqn2 >= AnalysisModel.START_EQN_NUM:
                                self.DOF_graph.add_edge(
                                    eqn1 - AnalysisModel.START_EQN_NUM +
                                    AnalysisModel.START_VERTEX_NUM,
                                    eqn2 - AnalysisModel.START_EQN_NUM +
                                    AnalysisModel.START_VERTEX_NUM)
        return self.DOF_graph

    # def getDOFGroupGraph(self):
    #     # 和 get_DOF_graph() 有什么区别?
    #     # DOFGraph :number后(去除约束后)的节点里面的自由度(DOF),变成Vertex
    #     # DOFGroupGraph:所有节点(DOFGroup),变成Vertex
    #     if self.group_graph is None:
    #         numVertex = self.get_num_DOF_groups()
    #         if numVertex == 0:
    #             print('WARNING AnalysisMode::getDOFGroupGraph - 0 vertices, has the Domain been populated?\n')
    #             # exit(self, -1)
    #         graphStorage = {}
    #         self.group_graph = Graph(graphStorage) # 重点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    #         # now create the vertices with a reference equal to the DOF_Group number.
    #         # and a tag which ranges from 0 through numVertex-1
    #         DOFs = self.get_DOFs()
    #         count = AnalysisModel.START_VERTEX_NUM
    #         for dof in DOFs:
    #             DOF_GroupTag = dof.get_tag()
    #             DOF_GroupNodeTag = dof.getNodeTag()
    #             numDOF = dof.getNumFreeDOF()
    #             vertex = Vertex(DOF_GroupTag, DOF_GroupNodeTag, 0, numDOF)
    #             self.group_graph.addVertex(vertex)
    #         # now add the edges, by looping over the Elements, getting their
    #         # IDs and adding edges between DOFs for equation numbers >= START_EQN_NUM
    #         FEs = self.get_FEs()
    #         for ele in FEs:
    #             id1 = ele.getDOFtags()
    #             size = id1.Size()
    #             for i in range(0, size):
    #                 dof1 = id1[i]
    #                 for j in range(0, size):
    #                     if i != j:
    #                         dof2 = id1[j]
    #                         self.group_graph.addEdge(dof1, dof2)
    #     return self.group_graph

    # methods to update the response quantities at the DOF_Groups,
    # which in turn set the new nodal trial response quantities
    def set_response(self, disp, vel, accel):
        # all is Vector
        DOFgrps = self.get_DOFs()
        for dof in DOFgrps:
            dof.set_node_disp(disp)
            dof.set_node_vel(vel)
            dof.set_node_accel(accel)

    def set_disp(self, disp):
        DOFgrps = self.get_DOFs()
        for dof in DOFgrps:
            dof.set_node_disp(disp)

    # def setVel(self, vel):
    #     DOFgrps = self.get_DOFs()
    #     for dof in DOFgrps:
    #         dof.setNodeVel(vel)
    #
    # def setAccel(self, accel):
    #     DOFgrps = self.get_DOFs()
    #     for dof in DOFgrps:
    #         dof.setNodeAccel(accel)

    def incr_disp(self, disp):
        # disp 是 Vector
        DOFgrps = self.get_DOFs()
        for tag in DOFgrps:
            dof = DOFgrps[tag]
            dof.incr_node_disp(disp)

    # def incrVel(self, vel):
    #     DOFgrps = self.get_DOFs()
    #     for dof in DOFgrps:
    #         dof.incrNodeVel(vel)
    #
    # def incrAccel(self, accel):
    #     DOFgrps = self.get_DOFs()
    #     for dof in DOFgrps:
    #         dof.incrNodeAccel(accel)

    # methods added to store the eigenvalues and vectors in the domain
    # def setNumEigenvectors(self, numEigenvectors):
    #     pass
    # def setEigenvector(self, mode, eigenvalue):
    #     pass
    # def setEigenvalues(self, eigenvalue):
    #     pass
    # def getEigenvalues(self):
    #     pass
    # def getModelDampingFactors(self):
    #     pass
    # def inclModalDampingMatrix(self):
    #     pass

    # methods which trigger operations in the Domain
    def set_links(self, theDomain, theHandler):
        self.domain = theDomain
        self.handler = theHandler

    def apply_load_domain(self, pseudoTime):
        # check to see there is a Domain linked to the Model
        if self.domain is None:
            print(
                'WARNING: AnalysisModel::apply_load_domain - No Domain linked.\n'
            )
            return None

        self.domain.apply_load(pseudoTime)
        self.handler.apply_load()

    def update_domain(self):  # 有重载
        # check to see there is a Domain linked to the Model
        if self.domain is None:
            print('WARNING: AnalysisModel::update_domain. No Domain linked.\n')
            return -1

        res = self.domain.update()
        if res == 0:
            return self.handler.update()
        return res

    # def update_domain(self, newTime, dT):
    #     pass

    # def analysis_step(self, dT=0.0):
    #     # check to see there is a Domain linked to the Model
    #     if self.domain is None:
    #         print('WARNING: AnalysisModel::newStep. No domain linked.\n')
    #         return -1
    #     # invoke the method
    #     return self.domain.analysis_step(dT)

    # def eigenAnalysis(self, numMode, generalized, findSmallest):
    #     pass

    def commit_domain(self):
        # check to see there is a Domain linked to the Model
        if self.domain is None:
            print('WARNING: AnalysisModel::commit_domain. No Domain linked.\n')
            return -1
        # invoke the method
        if self.domain.commit() < 0:
            print(
                'WARNING: AnalysisModel::commit_domain - Domain::commit() failed.\n'
            )
            return -2
        return 0

    def revert_domain_to_last_commit(self):
        if self.domain is None:
            print(
                'WARNING: AnalysisModel::revert_domain_to_last_commit. No Domain linked.\n'
            )
            return -1
        if self.domain.revert_to_last_commit() < 0:
            print(
                'WARNING: AnalysisModel::revert_domain_to_last_commit. Domain::revertToLastCommit() failed.\n'
            )
            return -2
        return 0

    def get_current_domain_time(self):
        # check to see there is a Domain linked to the Model
        if self.domain is None:
            print(
                'WARNING: AnalysisModel::get_current_domain_time - No Domain linked.\n'
            )
            return None
        return self.domain.get_current_time()

    def set_current_domain_time(self, newTime):
        if self.domain is None:
            print(
                'WARNING: AnalysisModel::get_current_domain_time. No Domain linked.\n'
            )
            return -1
        return self.domain.get_current_time()

    # def setRayleighDampingFactors(self, alphaM, betaK, betaKi, betaKc):
    #     pass

    def get_domain(self):
        return self.domain
Пример #16
0
                visited[temp.data] = True
                temp = temp.next_element
    return result, visited


def bfs_traversal(g: Graph, source):
    result = ""
    num_vertices = g.vertices
    if num_vertices is 0:
        return result

    visited = [False] * num_vertices

    result, visited = bfs_traversal_helper(g, source, visited)

    for i in range(num_vertices):
        if visited[i] is False:
            result_new, visited = bfs_traversal_helper(g, i, visited)
            result += result_new

    return result


g = Graph(5)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)

print(bfs_traversal(g, 0))
Пример #17
0
class TestBFS_Case_16(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 76
        self.graph = Graph(self.START)
        self.graph.add_edge(515, 804)
        self.graph.add_edge(12, 344)
        self.graph.add_edge(387, 256)
        self.graph.add_edge(507, 508)
        self.graph.add_edge(258, 300)
        self.graph.add_edge(222, 132)
        self.graph.add_edge(12, 264)
        self.graph.add_edge(219, 1)
        self.graph.add_edge(51, 284)
        self.graph.add_edge(297, 452)
        self.graph.add_edge(315, 272)
        self.graph.add_edge(132, 272)
        self.graph.add_edge(270, 468)
        self.graph.add_edge(66, 356)
        self.graph.add_edge(345, 236)
        self.graph.add_edge(93, 20)
        self.graph.add_edge(294, 168)
        self.graph.add_edge(396, 264)
        self.graph.add_edge(405, 104)
        self.graph.add_edge(273, 260)
        self.graph.add_edge(252, 512)
        self.graph.add_edge(249, 480)
        self.graph.add_edge(462, 248)
        self.graph.add_edge(219, 168)
        self.graph.add_edge(219, 236)
        self.graph.add_edge(333, 248)
        self.graph.add_edge(402, 488)
        self.graph.add_edge(42, 268)
        self.graph.add_edge(180, 164)
        self.graph.add_edge(279, 464)
        self.graph.add_edge(39, 80)
        self.graph.add_edge(480, 140)
        self.graph.add_edge(150, 220)
        self.graph.add_edge(18, 476)
        self.graph.add_edge(138, 416)
        self.graph.add_edge(69, 384)
        self.graph.add_edge(297, 232)
        self.graph.add_edge(135, 84)
        self.graph.add_edge(102, 428)
        self.graph.add_edge(399, 132)
        self.graph.add_edge(141, 232)
        self.graph.add_edge(300, 400)
        self.graph.add_edge(312, 388)
        self.graph.add_edge(489, 244)
        self.graph.add_edge(258, 424)
        self.graph.add_edge(132, 248)
        self.graph.add_edge(51, 220)
        self.graph.add_edge(207, 488)
        self.graph.add_edge(90, 140)
        self.graph.add_edge(306, 176)
        self.graph.add_edge(87, 260)
        self.graph.add_edge(174, 228)
        self.graph.add_edge(57, 300)
        self.graph.add_edge(18, 332)
        self.graph.add_edge(36, 404)
        self.graph.add_edge(66, 308)
        self.graph.add_edge(18, 128)
        self.graph.add_edge(252, 172)
        self.graph.add_edge(354, 300)
        self.graph.add_edge(474, 196)
        self.graph.add_edge(345, 192)
        self.graph.add_edge(246, 4)
        self.graph.add_edge(405, 228)
        self.graph.add_edge(348, 64)
        self.graph.add_edge(480, 208)
        self.graph.add_edge(276, 112)
        self.graph.add_edge(228, 324)
        self.graph.add_edge(1, 436)
        self.graph.add_edge(183, 344)
        self.graph.add_edge(204, 300)
        self.graph.add_edge(264, 112)
        self.graph.add_edge(216, 212)
        self.graph.add_edge(225, 248)
        self.graph.add_edge(114, 124)
        self.graph.add_edge(288, 240)
        self.graph.add_edge(312, 260)
        self.graph.add_edge(456, 292)
        self.graph.add_edge(456, 296)
        self.graph.add_edge(84, 136)
        self.graph.add_edge(429, 456)
        self.graph.add_edge(78, 396)
        self.graph.add_edge(465, 140)
        self.graph.add_edge(504, 80)
        self.graph.add_edge(327, 504)
        self.graph.add_edge(492, 60)
        self.graph.add_edge(339, 364)
        self.graph.add_edge(237, 72)
        self.graph.add_edge(258, 280)
        self.graph.add_edge(264, 340)
        self.graph.add_edge(159, 308)
        self.graph.add_edge(21, 36)
        self.graph.add_edge(99, 192)
        self.graph.add_edge(69, 68)
        self.graph.add_edge(414, 16)
        self.graph.add_edge(117, 440)
        self.graph.add_edge(321, 420)
        self.graph.add_edge(240, 360)
        self.graph.add_edge(312, 124)
        self.graph.add_edge(168, 488)
        self.graph.add_edge(12, 60)
        self.graph.add_edge(123, 380)
        self.graph.add_edge(18, 256)
        self.graph.add_edge(264, 488)
        self.graph.add_edge(438, 172)
        self.graph.add_edge(108, 220)
        self.graph.add_edge(102, 12)
        self.graph.add_edge(318, 492)
        self.graph.add_edge(471, 268)
        self.graph.add_edge(345, 488)
        self.graph.add_edge(120, 388)
        self.graph.add_edge(492, 24)
        self.graph.add_edge(504, 400)
        self.graph.add_edge(72, 84)
        self.graph.add_edge(237, 64)
        self.graph.add_edge(12, 392)
        self.graph.add_edge(438, 424)
        self.graph.add_edge(234, 112)
        self.graph.add_edge(318, 368)
        self.graph.add_edge(504, 480)
        self.graph.add_edge(486, 208)
        self.graph.add_edge(381, 432)
        self.graph.add_edge(279, 336)
        self.graph.add_edge(27, 296)
        self.graph.add_edge(180, 264)
        self.graph.add_edge(180, 140)
        self.graph.add_edge(438, 64)
        self.graph.add_edge(468, 44)
        self.graph.add_edge(138, 72)
        self.graph.add_edge(348, 144)
        self.graph.add_edge(1, 484)
        self.graph.add_edge(36, 124)
        self.graph.add_edge(48, 464)
        self.graph.add_edge(195, 336)
        self.graph.add_edge(69, 452)
        self.graph.add_edge(450, 400)
        self.graph.add_edge(453, 196)
        self.graph.add_edge(318, 292)
        self.graph.add_edge(366, 452)
        self.graph.add_edge(207, 396)
        self.graph.add_edge(222, 472)
        self.graph.add_edge(489, 140)
        self.graph.add_edge(477, 28)
        self.graph.add_edge(342, 48)
        self.graph.add_edge(384, 284)
        self.graph.add_edge(132, 412)
        self.graph.add_edge(225, 112)
        self.graph.add_edge(411, 476)
        self.graph.add_edge(225, 480)
        self.graph.add_edge(90, 132)
        self.graph.add_edge(309, 8)
        self.graph.add_edge(390, 152)
        self.graph.add_edge(351, 216)
        self.graph.add_edge(180, 228)
        self.graph.add_edge(348, 192)
        self.graph.add_edge(375, 8)
        self.graph.add_edge(342, 36)
        self.graph.add_edge(321, 508)
        self.graph.add_edge(492, 364)
        self.graph.add_edge(42, 176)
        self.graph.add_edge(441, 212)
        self.graph.add_edge(366, 188)
        self.graph.add_edge(297, 260)
        self.graph.add_edge(258, 252)
        self.graph.add_edge(54, 396)
        self.graph.add_edge(372, 80)
        self.graph.add_edge(48, 100)
        self.graph.add_edge(48, 240)
        self.graph.add_edge(216, 88)
        self.graph.add_edge(27, 476)
        self.graph.add_edge(3, 160)
        self.graph.add_edge(171, 360)
        self.graph.add_edge(75, 300)
        self.graph.add_edge(408, 312)
        self.graph.add_edge(390, 264)
        self.graph.add_edge(495, 508)
        self.graph.add_edge(345, 200)
        self.graph.add_edge(228, 392)
        self.graph.add_edge(387, 188)
        self.graph.add_edge(393, 388)
        self.graph.add_edge(348, 396)
        self.graph.add_edge(105, 312)
        self.graph.add_edge(309, 500)
        self.graph.add_edge(147, 452)
        self.graph.add_edge(201, 296)
        self.graph.add_edge(15, 192)
        self.graph.add_edge(153, 460)
        self.graph.add_edge(258, 164)
        self.graph.add_edge(261, 424)
        self.graph.add_edge(69, 364)
        self.graph.add_edge(270, 92)
        self.graph.add_edge(234, 424)
        self.graph.add_edge(312, 88)
        self.graph.add_edge(219, 84)
        self.graph.add_edge(342, 64)
        self.graph.add_edge(411, 348)
        self.graph.add_edge(192, 288)
        self.graph.add_edge(333, 260)
        self.graph.add_edge(9, 88)
        self.graph.add_edge(24, 272)
        self.graph.add_edge(444, 36)
        self.graph.add_edge(279, 272)
        self.graph.add_edge(45, 40)
        self.graph.add_edge(93, 276)
        self.graph.add_edge(396, 344)
        self.graph.add_edge(189, 260)
        self.graph.add_edge(321, 88)
        self.graph.add_edge(495, 152)
        self.graph.add_edge(222, 496)
        self.graph.add_edge(342, 72)
        self.graph.add_edge(513, 456)
        self.graph.add_edge(249, 312)
        self.graph.add_edge(345, 16)
        self.graph.add_edge(312, 200)
        self.graph.add_edge(453, 340)
        self.graph.add_edge(39, 288)
        self.graph.add_edge(231, 448)
        self.graph.add_edge(252, 404)
        self.graph.add_edge(267, 436)
        self.graph.add_edge(492, 332)
        self.graph.add_edge(453, 404)
        self.graph.add_edge(60, 56)
        self.graph.add_edge(228, 368)
        self.graph.add_edge(222, 504)
        self.graph.add_edge(315, 244)
        self.graph.add_edge(438, 76)
        self.graph.add_edge(177, 1)
        self.graph.add_edge(327, 276)
        self.graph.add_edge(471, 440)
        self.graph.add_edge(129, 484)
        self.graph.add_edge(378, 20)
        self.graph.add_edge(339, 508)
        self.graph.add_edge(357, 484)
        self.graph.add_edge(105, 340)
        self.graph.add_edge(504, 352)
        self.graph.add_edge(447, 428)
        self.graph.add_edge(210, 424)
        self.graph.add_edge(345, 144)
        self.graph.add_edge(24, 28)
        self.graph.add_edge(390, 436)
        self.graph.add_edge(96, 488)
        self.graph.add_edge(147, 144)
        self.graph.add_edge(483, 436)
        self.graph.add_edge(180, 432)
        self.graph.add_edge(102, 228)
        self.graph.add_edge(420, 504)
        self.graph.add_edge(183, 100)
        self.graph.add_edge(45, 116)
        self.graph.add_edge(351, 272)
        self.graph.add_edge(315, 168)
        self.graph.add_edge(258, 312)
        self.graph.add_edge(153, 344)
        self.graph.add_edge(477, 372)
        self.graph.add_edge(129, 332)
        self.graph.add_edge(36, 496)
        self.graph.add_edge(72, 132)
        self.graph.add_edge(384, 64)
        self.graph.add_edge(237, 144)
        self.graph.add_edge(192, 292)
        self.graph.add_edge(381, 152)
        self.graph.add_edge(474, 252)
        self.graph.add_edge(135, 108)
        self.graph.add_edge(99, 136)
        self.graph.add_edge(489, 304)
        self.graph.add_edge(39, 460)
        self.graph.add_edge(510, 48)
        self.graph.add_edge(51, 196)
        self.graph.add_edge(483, 64)
        self.graph.add_edge(141, 224)
        self.graph.add_edge(48, 380)
        self.graph.add_edge(360, 236)
        self.graph.add_edge(279, 368)
        self.graph.add_edge(75, 12)
        self.graph.add_edge(399, 12)
        self.graph.add_edge(243, 292)
        self.graph.add_edge(258, 288)
        self.graph.add_edge(408, 232)
        self.graph.add_edge(204, 380)
        self.graph.add_edge(189, 472)
        self.graph.add_edge(210, 268)
        self.graph.add_edge(123, 156)
        self.graph.add_edge(390, 212)
        self.graph.add_edge(42, 28)
        self.graph.add_edge(276, 156)
        self.graph.add_edge(294, 344)
        self.graph.add_edge(474, 248)
        self.graph.add_edge(72, 432)
        self.graph.add_edge(96, 444)
        self.graph.add_edge(309, 476)
        self.graph.add_edge(6, 272)
        self.graph.add_edge(312, 396)
        self.graph.add_edge(342, 224)
        self.graph.add_edge(351, 152)
        self.graph.add_edge(144, 416)
        self.graph.add_edge(450, 296)
        self.graph.add_edge(177, 444)
        self.graph.add_edge(297, 24)
        self.graph.add_edge(486, 188)
        self.graph.add_edge(183, 220)
        self.graph.add_edge(198, 236)
        self.graph.add_edge(324, 208)
        self.graph.add_edge(210, 484)
        self.graph.add_edge(129, 84)
        self.graph.add_edge(507, 504)
        self.graph.add_edge(123, 60)
        self.graph.add_edge(513, 364)
        self.graph.add_edge(111, 56)
        self.graph.add_edge(90, 188)
        self.graph.add_edge(375, 264)
        self.graph.add_edge(186, 412)
        self.graph.add_edge(15, 92)
        self.graph.add_edge(114, 300)
        self.graph.add_edge(411, 348)
        self.graph.add_edge(495, 96)
        self.graph.add_edge(219, 164)
        self.graph.add_edge(351, 244)
        self.graph.add_edge(432, 456)
        self.graph.add_edge(117, 420)
        self.graph.add_edge(405, 132)
        self.graph.add_edge(336, 252)
        self.graph.add_edge(423, 216)
        self.graph.add_edge(429, 184)
        self.graph.add_edge(153, 152)
        self.graph.add_edge(186, 228)
        self.graph.add_edge(60, 312)
        self.graph.add_edge(195, 380)
        self.graph.add_edge(453, 96)
        self.graph.add_edge(408, 156)
        self.graph.add_edge(261, 264)
        self.graph.add_edge(444, 512)
        self.graph.add_edge(48, 36)
        self.graph.add_edge(171, 64)
        self.graph.add_edge(249, 64)
        self.graph.add_edge(402, 232)
        self.graph.add_edge(270, 108)
        self.graph.add_edge(438, 236)
        self.graph.add_edge(51, 336)
        self.graph.add_edge(330, 88)
        self.graph.add_edge(252, 152)
        self.graph.add_edge(45, 452)
        self.graph.add_edge(18, 48)
        self.graph.add_edge(219, 404)
        self.graph.add_edge(327, 40)
        self.graph.add_edge(21, 408)
        self.graph.add_edge(417, 72)
        self.graph.add_edge(3, 156)
        self.graph.add_edge(72, 404)
        self.graph.add_edge(264, 176)
        self.graph.add_edge(219, 76)
        self.graph.add_edge(390, 168)
        self.graph.add_edge(279, 64)
        self.graph.add_edge(150, 48)
        self.graph.add_edge(414, 344)
        self.graph.add_edge(348, 248)
        self.graph.add_edge(54, 436)
        self.graph.add_edge(261, 280)
        self.graph.add_edge(486, 260)
        self.graph.add_edge(198, 124)
        self.graph.add_edge(57, 44)
        self.graph.add_edge(486, 356)
        self.graph.add_edge(441, 80)
        self.graph.add_edge(486, 136)
        self.graph.add_edge(510, 168)
        self.graph.add_edge(1, 220)
        self.graph.add_edge(114, 384)
        self.graph.add_edge(441, 36)
        self.graph.add_edge(420, 324)
        self.graph.add_edge(480, 508)
        self.graph.add_edge(456, 160)
        self.graph.add_edge(258, 4)
        self.graph.add_edge(210, 356)
        self.graph.add_edge(324, 356)
        self.graph.add_edge(294, 332)
        self.graph.add_edge(231, 416)
        self.graph.add_edge(255, 368)
        self.graph.add_edge(66, 20)
        self.graph.add_edge(231, 480)
        self.graph.add_edge(105, 88)
        self.graph.add_edge(162, 40)
        self.graph.add_edge(459, 300)
        self.graph.add_edge(66, 372)
        self.graph.add_edge(291, 360)
        self.graph.add_edge(498, 184)
        self.graph.add_edge(339, 192)
        self.graph.add_edge(21, 368)
        self.graph.add_edge(9, 60)
        self.graph.add_edge(288, 312)
        self.graph.add_edge(246, 112)
        self.graph.add_edge(1, 296)
        self.graph.add_edge(411, 292)
        self.graph.add_edge(450, 120)
        self.graph.add_edge(267, 400)
        self.graph.add_edge(225, 176)
        self.graph.add_edge(366, 232)
        self.graph.add_edge(420, 356)
        self.graph.add_edge(147, 464)
        self.graph.add_edge(27, 80)
        self.graph.add_edge(195, 60)
        self.graph.add_edge(267, 368)
        self.graph.add_edge(372, 196)
        self.graph.add_edge(258, 136)
        self.graph.add_edge(21, 160)
        self.graph.add_edge(9, 448)
        self.graph.add_edge(444, 344)
        self.graph.add_edge(483, 192)
        self.graph.add_edge(294, 256)
        self.graph.add_edge(285, 224)
        self.graph.add_edge(318, 112)
        self.graph.add_edge(486, 148)
        self.graph.add_edge(291, 96)
        self.graph.add_edge(405, 300)
        self.graph.add_edge(102, 316)
        self.graph.add_edge(450, 68)
        self.graph.add_edge(42, 320)
        self.graph.add_edge(9, 316)
        self.graph.add_edge(339, 400)
        self.graph.add_edge(42, 320)
        self.graph.add_edge(318, 120)
        self.graph.add_edge(459, 400)
        self.graph.add_edge(90, 364)
        self.graph.add_edge(3, 332)
        self.graph.add_edge(267, 108)
        self.graph.add_edge(447, 316)
        self.graph.add_edge(267, 168)
        self.graph.add_edge(303, 352)
        self.graph.add_edge(288, 44)
        self.graph.add_edge(243, 220)
        self.graph.add_edge(93, 436)
        self.graph.add_edge(498, 260)
        self.graph.add_edge(396, 332)
        self.graph.add_edge(159, 384)
        self.graph.add_edge(84, 240)
        self.graph.add_edge(312, 228)
        self.graph.add_edge(27, 216)
        self.graph.add_edge(108, 328)
        self.graph.add_edge(348, 212)
        self.graph.add_edge(393, 512)
        self.graph.add_edge(375, 372)
        self.graph.add_edge(282, 304)
        self.graph.add_edge(333, 364)
        self.graph.add_edge(318, 364)
        self.graph.add_edge(243, 132)
        self.graph.add_edge(408, 476)
        self.graph.add_edge(99, 440)
        self.graph.add_edge(351, 204)
        self.graph.add_edge(408, 268)
        self.graph.add_edge(429, 28)
        self.graph.add_edge(114, 260)
        self.graph.add_edge(279, 92)
        self.graph.add_edge(372, 408)
        self.graph.add_edge(363, 148)
        self.graph.add_edge(285, 508)
        self.graph.add_edge(156, 28)
        self.graph.add_edge(462, 348)
        self.graph.add_edge(282, 228)
        self.graph.add_edge(21, 312)
        self.graph.add_edge(141, 24)
        self.graph.add_edge(342, 100)
        self.graph.add_edge(159, 144)
        self.graph.add_edge(81, 24)
        self.graph.add_edge(9, 96)
        self.graph.add_edge(99, 368)
        self.graph.add_edge(363, 132)
        self.graph.add_edge(90, 40)
        self.graph.add_edge(132, 140)
        self.graph.add_edge(375, 88)
        self.graph.add_edge(156, 164)
        self.graph.add_edge(366, 144)
        self.graph.add_edge(39, 496)
        self.graph.add_edge(507, 184)
        self.graph.add_edge(177, 400)
        self.graph.add_edge(39, 76)
        self.graph.add_edge(399, 472)
        self.graph.add_edge(30, 16)
        self.graph.add_edge(408, 376)
        self.graph.add_edge(507, 500)
        self.graph.add_edge(129, 404)
        self.graph.add_edge(321, 44)
        self.graph.add_edge(150, 304)
        self.graph.add_edge(375, 264)
        self.graph.add_edge(60, 488)
        self.graph.add_edge(6, 392)
        self.graph.add_edge(339, 176)
        self.graph.add_edge(483, 16)
        self.graph.add_edge(312, 324)
        self.graph.add_edge(171, 104)
        self.graph.add_edge(381, 488)
        self.graph.add_edge(186, 320)
        self.graph.add_edge(468, 152)
        self.graph.add_edge(138, 28)
        self.graph.add_edge(336, 8)
        self.graph.add_edge(264, 288)
        self.graph.add_edge(321, 52)
        self.graph.add_edge(333, 328)
        self.graph.add_edge(273, 280)
        self.graph.add_edge(462, 272)
        self.graph.add_edge(96, 480)
        self.graph.add_edge(402, 340)
        self.graph.add_edge(189, 504)
        self.graph.add_edge(183, 452)
        self.graph.add_edge(495, 120)
        self.graph.add_edge(258, 12)
        self.graph.add_edge(132, 304)
        self.graph.add_edge(447, 352)
        self.graph.add_edge(84, 216)
        self.graph.add_edge(303, 88)
        self.graph.add_edge(129, 328)
        self.graph.add_edge(246, 328)
        self.graph.add_edge(195, 292)
        self.graph.add_edge(288, 132)
        self.graph.add_edge(15, 196)
        self.graph.add_edge(171, 124)
        self.graph.add_edge(195, 116)
        self.graph.add_edge(138, 184)
        self.graph.add_edge(324, 452)
        self.graph.add_edge(27, 172)
        self.graph.add_edge(210, 236)
        self.graph.add_edge(207, 20)
        self.graph.add_edge(384, 52)
        self.graph.add_edge(258, 72)
        self.graph.add_edge(375, 280)
        self.graph.add_edge(321, 488)
        self.graph.add_edge(141, 324)
        self.graph.add_edge(111, 216)
        self.graph.add_edge(174, 328)
        self.graph.add_edge(450, 372)
        self.graph.add_edge(195, 456)
        self.graph.add_edge(282, 464)
        self.graph.add_edge(117, 304)
        self.graph.add_edge(504, 116)
        self.graph.add_edge(318, 356)
        self.graph.add_edge(51, 32)
        self.graph.add_edge(330, 8)
        self.graph.add_edge(60, 48)
        self.graph.add_edge(117, 456)
        self.graph.add_edge(54, 100)
        self.graph.add_edge(186, 484)
        self.graph.add_edge(60, 296)
        self.graph.add_edge(363, 140)
        self.graph.add_edge(171, 136)
        self.graph.add_edge(510, 396)
        self.graph.add_edge(171, 364)
        self.graph.add_edge(42, 304)
        self.graph.add_edge(330, 464)
        self.graph.add_edge(474, 32)
        self.graph.add_edge(369, 20)
        self.graph.add_edge(78, 44)
        self.graph.add_edge(234, 320)
        self.graph.add_edge(180, 64)
        self.graph.add_edge(222, 352)
        self.graph.add_edge(333, 324)
        self.graph.add_edge(456, 348)
        self.graph.add_edge(192, 208)
        self.graph.add_edge(399, 464)
        self.graph.add_edge(399, 196)
        self.graph.add_edge(471, 88)
        self.graph.add_edge(180, 100)
        self.graph.add_edge(150, 272)
        self.graph.add_edge(321, 164)
        self.graph.add_edge(216, 268)
        self.graph.add_edge(354, 224)
        self.graph.add_edge(120, 496)
        self.graph.add_edge(180, 392)
        self.graph.add_edge(249, 100)
        self.graph.add_edge(63, 268)
        self.graph.add_edge(36, 484)
        self.graph.add_edge(513, 264)
        self.graph.add_edge(324, 292)
        self.graph.add_edge(177, 504)
        self.graph.add_edge(171, 204)
        self.graph.add_edge(381, 8)
        self.graph.add_edge(171, 400)
        self.graph.add_edge(54, 468)
        self.graph.add_edge(204, 324)
        self.graph.add_edge(261, 68)
        self.graph.add_edge(183, 352)
        self.graph.add_edge(18, 264)
        self.graph.add_edge(147, 276)
        self.graph.add_edge(273, 84)
        self.graph.add_edge(408, 320)
        self.graph.add_edge(399, 236)
        self.graph.add_edge(396, 68)
        self.graph.add_edge(330, 128)
        self.graph.add_edge(393, 252)
        self.graph.add_edge(261, 252)
        self.graph.add_edge(228, 484)
        self.graph.add_edge(414, 140)
        self.graph.add_edge(219, 316)
        self.graph.add_edge(306, 472)
        self.graph.add_edge(372, 316)
        self.graph.add_edge(237, 324)
        self.graph.add_edge(441, 492)
        self.graph.add_edge(501, 68)
        self.graph.add_edge(279, 104)
        self.graph.add_edge(3, 8)
        self.graph.add_edge(255, 452)
        self.graph.add_edge(225, 364)
        self.graph.add_edge(63, 92)
        self.graph.add_edge(219, 32)
        self.graph.add_edge(153, 488)
        self.graph.add_edge(432, 268)
        self.graph.add_edge(369, 148)
        self.graph.add_edge(177, 384)
        self.graph.add_edge(366, 436)
        self.graph.add_edge(219, 388)
        self.graph.add_edge(327, 364)
        self.graph.add_edge(393, 84)
        self.graph.add_edge(456, 408)
        self.graph.add_edge(243, 68)
        self.graph.add_edge(144, 412)
        self.graph.add_edge(216, 412)
        self.graph.add_edge(177, 164)
        self.graph.add_edge(243, 280)
        self.graph.add_edge(420, 328)
        self.graph.add_edge(456, 484)
        self.graph.add_edge(93, 176)
        self.graph.add_edge(99, 344)
        self.graph.add_edge(387, 176)
        self.graph.add_edge(237, 288)
        self.graph.add_edge(501, 276)
        self.graph.add_edge(93, 232)
        self.graph.add_edge(81, 20)
        self.graph.add_edge(57, 312)
        self.graph.add_edge(372, 20)
        self.graph.add_edge(84, 60)
        self.graph.add_edge(21, 152)
        self.graph.add_edge(183, 140)
        self.graph.add_edge(51, 368)
        self.graph.add_edge(147, 12)
        self.graph.add_edge(45, 356)
        self.graph.add_edge(429, 328)
        self.graph.add_edge(192, 240)
        self.graph.add_edge(345, 416)
        self.graph.add_edge(54, 336)
        self.graph.add_edge(453, 48)
        self.graph.add_edge(12, 328)
        self.graph.add_edge(384, 296)
        self.graph.add_edge(234, 64)
        self.graph.add_edge(429, 176)
        self.graph.add_edge(183, 220)
        self.graph.add_edge(192, 112)
        self.graph.add_edge(207, 416)
        self.graph.add_edge(1, 484)
        self.graph.add_edge(456, 360)
        self.graph.add_edge(108, 240)
        self.graph.add_edge(372, 224)
        self.graph.add_edge(195, 348)
        self.graph.add_edge(240, 1)
        self.graph.add_edge(306, 416)
        self.graph.add_edge(153, 460)
        self.graph.add_edge(126, 1)
        self.graph.add_edge(450, 248)
        self.graph.add_edge(501, 356)
        self.graph.add_edge(177, 188)
        self.graph.add_edge(282, 144)
        self.graph.add_edge(483, 304)
        self.graph.add_edge(24, 32)
        self.graph.add_edge(438, 300)
        self.graph.add_edge(408, 176)
        self.graph.add_edge(69, 420)
        self.graph.add_edge(102, 356)
        self.graph.add_edge(453, 436)
        self.graph.add_edge(81, 44)
        self.graph.add_edge(330, 264)
        self.graph.add_edge(174, 36)
        self.graph.add_edge(249, 460)
        self.graph.add_edge(93, 356)
        self.graph.add_edge(300, 32)
        self.graph.add_edge(174, 204)
        self.graph.add_edge(147, 160)
        self.graph.add_edge(387, 44)
        self.graph.add_edge(129, 280)
        self.graph.add_edge(210, 292)
        self.graph.add_edge(93, 8)
        self.graph.add_edge(261, 268)
        self.graph.add_edge(138, 120)
        self.graph.add_edge(441, 284)
        self.graph.add_edge(6, 404)
        self.graph.add_edge(426, 476)
        self.graph.add_edge(342, 244)
        self.graph.add_edge(141, 264)
        self.graph.add_edge(66, 60)
        self.graph.add_edge(351, 436)
        self.graph.add_edge(78, 388)
        self.graph.add_edge(141, 276)
        self.graph.add_edge(24, 464)
        self.graph.add_edge(471, 100)
        self.graph.add_edge(48, 484)
        self.graph.add_edge(168, 204)
        self.graph.add_edge(93, 76)
        self.graph.add_edge(441, 152)
        self.graph.add_edge(447, 404)
        self.graph.add_edge(273, 468)
        self.graph.add_edge(417, 392)
        self.graph.add_edge(72, 392)
        self.graph.add_edge(303, 504)
        self.graph.add_edge(243, 416)
        self.graph.add_edge(495, 472)
        self.graph.add_edge(471, 472)
        self.graph.add_edge(228, 28)
        self.graph.add_edge(273, 120)
        self.graph.add_edge(495, 108)
        self.graph.add_edge(117, 156)
        self.graph.add_edge(321, 300)
        self.graph.add_edge(153, 124)
        self.graph.add_edge(126, 204)
        self.graph.add_edge(279, 124)
        self.graph.add_edge(75, 472)
        self.graph.add_edge(231, 72)
        self.graph.add_edge(174, 348)
        self.graph.add_edge(15, 472)
        self.graph.add_edge(90, 400)
        self.graph.add_edge(321, 208)
        self.graph.add_edge(21, 20)
        self.graph.add_edge(177, 440)
        self.graph.add_edge(465, 68)
        self.graph.add_edge(246, 452)
        self.graph.add_edge(381, 236)
        self.graph.add_edge(30, 196)
        self.graph.add_edge(120, 340)
        self.graph.add_edge(6, 152)
        self.graph.add_edge(156, 300)
        self.graph.add_edge(447, 104)
        self.graph.add_edge(327, 504)
        self.graph.add_edge(198, 328)
        self.graph.add_edge(471, 32)
        self.graph.add_edge(153, 388)
        self.graph.add_edge(219, 512)
        self.graph.add_edge(294, 260)
        self.graph.add_edge(204, 192)
        self.graph.add_edge(393, 332)
        self.graph.add_edge(510, 400)
        self.graph.add_edge(369, 444)
        self.graph.add_edge(186, 1)
        self.graph.add_edge(75, 80)
        self.graph.add_edge(492, 128)
        self.graph.add_edge(405, 404)
        self.graph.add_edge(282, 84)
        self.graph.add_edge(237, 148)
        self.graph.add_edge(255, 240)
        self.graph.add_edge(378, 288)
        self.graph.add_edge(90, 440)
        self.graph.add_edge(60, 192)
        self.graph.add_edge(321, 344)
        self.graph.add_edge(246, 48)
        self.graph.add_edge(456, 228)
        self.graph.add_edge(507, 272)
        self.graph.add_edge(294, 88)
        self.graph.add_edge(420, 444)
        self.graph.add_edge(393, 304)
        self.graph.add_edge(465, 452)
        self.graph.add_edge(51, 168)
        self.graph.add_edge(456, 96)
        self.graph.add_edge(441, 120)
        self.graph.add_edge(126, 452)
        self.graph.add_edge(246, 132)
        self.graph.add_edge(459, 172)
        self.graph.add_edge(3, 448)
        self.graph.add_edge(330, 84)
        self.graph.add_edge(33, 104)
        self.graph.add_edge(237, 208)
        self.graph.add_edge(348, 472)
        self.graph.add_edge(240, 264)
        self.graph.add_edge(246, 204)
        self.graph.add_edge(177, 284)
        self.graph.add_edge(447, 60)
        self.graph.add_edge(291, 416)
        self.graph.add_edge(231, 384)
        self.graph.add_edge(306, 128)
        self.graph.add_edge(72, 16)
        self.graph.add_edge(345, 440)
        self.graph.add_edge(21, 64)
        self.graph.add_edge(90, 204)
        self.graph.add_edge(192, 424)
        self.graph.add_edge(201, 396)
        self.graph.add_edge(351, 472)
        self.graph.add_edge(156, 488)
        self.graph.add_edge(117, 52)
        self.graph.add_edge(411, 448)
        self.graph.add_edge(426, 212)
        self.graph.add_edge(75, 196)
        self.graph.add_edge(444, 445)
        self.graph.add_edge(189, 500)
        self.graph.add_edge(456, 136)
        self.graph.add_edge(39, 512)
        self.graph.add_edge(156, 484)
        self.graph.add_edge(261, 328)
        self.graph.add_edge(456, 116)
        self.graph.add_edge(453, 364)
        self.graph.add_edge(39, 160)
        self.graph.add_edge(213, 436)
        self.graph.add_edge(330, 512)
        self.graph.add_edge(189, 124)
        self.graph.add_edge(42, 232)
        self.graph.add_edge(108, 332)
        self.graph.add_edge(486, 428)
        self.graph.add_edge(174, 36)
        self.graph.add_edge(84, 256)
        self.graph.add_edge(267, 340)
        self.graph.add_edge(327, 268)
        self.graph.add_edge(459, 100)
        self.graph.add_edge(105, 500)
        self.graph.add_edge(348, 200)
        self.graph.add_edge(174, 188)
        self.graph.add_edge(330, 508)
        self.graph.add_edge(93, 168)
        return super().setUp()

    def test_case_16(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(),[12, -1, 18, 24, -1, 18, -1, 12, 18, -1, -1, 24, -1, -1, 24, 24, -1, 24, -1, 12, 18, -1, -1, 18, -1, -1, 18, 24, -1, 30, -1, 12, 30, -1, -1, 18, -1, -1, 6, 24, -1, 18, -1, 18, 18, -1, -1, 24, -1, -1, 18, 24, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 30, 12, -1, 18, -1, 24, 24, -1, -1, 18, -1, -1, 18, -1, 18, -1, 12, 18, -1, -1, 12, -1, -1, 30, 24, -1, 24, -1, 24, 6, -1, -1, 24, -1, -1, 24, 24, -1, 18, -1, 24, 24, -1, -1, 24, -1, -1, 24, 18, -1, 18, -1, 24, 24, -1, -1, 18, -1, -1, 24, 24, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 18, 18, -1, 24, -1, 24, 18, -1, -1, 24, -1, -1, 18, 24, -1, 24, -1, 24, 18, -1, -1, 18, -1, -1, 24, 12, -1, 30, -1, 12, -1, -1, -1, 12, -1, -1, 18, 12, -1, 24, -1, 12, 18, -1, -1, 18, -1, -1, 24, 24, -1, 18, -1, 24, 24, -1, -1, 18, -1, -1, 24, 24, -1, 18, -1, 24, 24, -1, -1, 18, -1, -1, 18, 24, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 6, 18, -1, 18, -1, 24, 18, -1, -1, 24, -1, -1, 24, 12, -1, 18, -1, 12, 18, -1, -1, 18, -1, -1, 24, 24, -1, 24, -1, 24, 18, -1, -1, 18, -1, -1, 24, 18, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 18, 24, -1, 30, -1, 24, 18, -1, -1, 12, -1, -1, 18, 24, -1, 18, -1, 24, 30, -1, -1, 12, -1, -1, 24, 24, -1, 18, -1, 18, 18, -1, -1, 12, -1, -1, 24, 24, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 18, 12, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 18, 24, -1, 18, -1, 24, 24, -1, -1, 18, -1, -1, 18, 24, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 18, 24, -1, 18, -1, 12, 24, -1, -1, 18, -1, -1, 24, 24, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 18, 24, -1, 18, -1, 24, 18, -1, -1, 18, -1, -1, 18, 12, -1, 18, -1, 24, 18, -1, -1, 24, -1, -1, 18, 18, -1, 18, -1, 12, 18, -1, -1, 18, -1, -1, 24, 24, -1, 30, -1, 24, 24, -1, -1, 18, -1, -1, 24, 12, -1, 30, -1, 24, 18, -1, -1, 24, -1, -1, -1, 12, -1, 6, -1, 24, 18, -1, -1, 18, 24, -1, 18, 24, -1, 24, -1, 24, 18, -1, -1, 18, -1, -1, 18, 12, -1, 24, -1, 24, 30, -1, -1, 24, -1, -1, 18, 24, -1, 18, -1, 24, 24, -1, -1, 24, -1, -1, 18, 18, -1, 18, -1, 18, 30, -1, -1, 24, -1, -1, 24, 12, -1, 30, -1, 24, 18, -1, -1, 18, -1, -1, 24, 24, -1, 18, -1, 12, 24, -1, -1])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()
Пример #18
0
                visited[temp.data] = True
                temp = temp.next_element
    return result, visited


def dfs_traversal(g: Graph, source):
    result = ""
    num_vertices = g.vertices
    if num_vertices is 0:
        return result

    visited = [False] * num_vertices

    result, visited = dfs_traversal_helper(g, source, visited)

    for i in range(num_vertices):
        if visited[i] is False:
            result_new, visited = dfs_traversal_helper(g, i, visited)
            result += result_new

    return result


g = Graph(7)
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(2, 4)
g.add_edge(2, 5)
g.add_edge(3, 6)

print(dfs_traversal(g, 1))
Пример #19
0
class TestBFS_Case_7(unittest.TestCase):
    START = None
    graph = None

    def setUp(self):
        self.START = 22
        self.graph = Graph(self.START)
        self.graph.add_edge(50, 392)
        self.graph.add_edge(1, 44)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 45)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 12)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 11)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(1, 11)
        self.graph.add_edge(1, 9)
        self.graph.add_edge(1, 9)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 49)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 20)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 20)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 45)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 50)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 7)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 34)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 47)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 5)
        self.graph.add_edge(1, 9)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 39)
        self.graph.add_edge(1, 39)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 21)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 39)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 10)
        self.graph.add_edge(1, 11)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(1, 47)
        self.graph.add_edge(1, 45)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 34)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 7)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 30)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 39)
        self.graph.add_edge(1, 49)
        self.graph.add_edge(1, 34)
        self.graph.add_edge(1, 44)
        self.graph.add_edge(1, 21)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 47)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 6)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 44)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 34)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 45)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 14)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 44)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 34)
        self.graph.add_edge(1, 11)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 7)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 47)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 31)
        self.graph.add_edge(1, 26)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 12)
        self.graph.add_edge(1, 26)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 34)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 6)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 9)
        self.graph.add_edge(1, 5)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 6)
        self.graph.add_edge(1, 30)
        self.graph.add_edge(1, 14)
        self.graph.add_edge(1, 4)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 38)
        self.graph.add_edge(1, 12)
        self.graph.add_edge(1, 11)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 14)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 31)
        self.graph.add_edge(1, 20)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 20)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 5)
        self.graph.add_edge(1, 30)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 11)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 43)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 5)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 6)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 34)
        self.graph.add_edge(1, 39)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 4)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 9)
        self.graph.add_edge(1, 31)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 44)
        self.graph.add_edge(1, 26)
        self.graph.add_edge(1, 49)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 49)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 50)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 49)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 6)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 14)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 26)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 45)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 3)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 4)
        self.graph.add_edge(1, 20)
        self.graph.add_edge(1, 47)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 50)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 30)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 10)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 30)
        self.graph.add_edge(1, 21)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 4)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(1, 6)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 11)
        self.graph.add_edge(1, 27)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 30)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 30)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 4)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 50)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 44)
        self.graph.add_edge(1, 29)
        self.graph.add_edge(1, 50)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 32)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 12)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 42)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 10)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 31)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 28)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 13)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 16)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 31)
        self.graph.add_edge(1, 4)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 15)
        self.graph.add_edge(1, 2)
        self.graph.add_edge(1, 10)
        self.graph.add_edge(1, 31)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 37)
        self.graph.add_edge(1, 14)
        self.graph.add_edge(1, 22)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 24)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 23)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 17)
        self.graph.add_edge(1, 33)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 41)
        self.graph.add_edge(1, 25)
        self.graph.add_edge(1, 8)
        self.graph.add_edge(1, 46)
        self.graph.add_edge(1, 4)
        self.graph.add_edge(1, 26)
        self.graph.add_edge(1, 18)
        self.graph.add_edge(1, 45)
        self.graph.add_edge(1, 48)
        self.graph.add_edge(1, 35)
        self.graph.add_edge(1, 40)
        self.graph.add_edge(1, 19)
        self.graph.add_edge(1, 36)
        self.graph.add_edge(1, 49)
        return super().setUp()

    def test_case_7(self):
        self.graph.get_all_paths()
        self.graph.get_costs()
        self.assertEqual(self.graph.get_costs(), [
            6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
            12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
            12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12
        ])

    def tearDown(self):
        del self.START
        del self.graph
        return super().tearDown()