Esempio n. 1
0
def get_data(filename: str):
    graph = Graph()
    with open(filename, 'r') as file:
        lines = file.readlines()
        n, m = tuple(int(x) for x in lines[0].split())
        clients = tuple(int(x) for x in lines[1].split())
        for line in lines[2:]:
            start, end, weight = tuple(int(x) for x in line.split())
            graph.create_edges_from_vertexes(start, end, weight)

    return n, m, clients, graph
Esempio n. 2
0
class GraphTest(unittest.TestCase):
    def setUp(self) -> None:
        self.firstGraph = Graph()

        self.firstGraph.create_edges_from_vertexes(1, 3, 10)
        self.firstGraph.create_edges_from_vertexes(3, 4, 80)
        self.firstGraph.create_edges_from_vertexes(4, 5, 50)
        self.firstGraph.create_edges_from_vertexes(5, 6, 20)
        self.firstGraph.create_edges_from_vertexes(2, 3, 40)
        self.firstGraph.create_edges_from_vertexes(2, 4, 100)

        self.secondGraph = Graph()

        self.secondGraph.create_edges_from_vertexes(1, 2, 20)
        self.secondGraph.create_edges_from_vertexes(2, 3, 20)
        self.secondGraph.create_edges_from_vertexes(3, 6, 20)
        self.secondGraph.create_edges_from_vertexes(6, 9, 20)
        self.secondGraph.create_edges_from_vertexes(9, 8, 20)
        self.secondGraph.create_edges_from_vertexes(8, 7, 20)
        self.secondGraph.create_edges_from_vertexes(7, 4, 20)
        self.secondGraph.create_edges_from_vertexes(4, 1, 20)
        self.secondGraph.create_edges_from_vertexes(5, 2, 10)
        self.secondGraph.create_edges_from_vertexes(5, 4, 10)
        self.secondGraph.create_edges_from_vertexes(5, 6, 10)
        self.secondGraph.create_edges_from_vertexes(5, 8, 10)

        self.thirdGraph = Graph()

        self.thirdGraph.create_edges_from_vertexes(1, 2, 50)
        self.thirdGraph.create_edges_from_vertexes(2, 3, 1000000000)

    def test_graphs_vertexes(self):
        self.assertEqual([1, 3, 4, 5, 6, 2],
                         list(self.firstGraph.connections.keys()))
        self.assertEqual([1, 2, 3, 6, 9, 8, 7, 4, 5],
                         list(self.secondGraph.connections.keys()))

    def test_graphs_connections(self):
        self.assertEqual(
            {
                1: [(3, 10)],
                3: [(1, 10), (4, 80), (2, 40)],
                4: [(3, 80), (5, 50), (2, 100)],
                5: [(4, 50), (6, 20)],
                6: [(5, 20)],
                2: [(3, 40), (4, 100)]
            }, self.firstGraph.connections)

        self.assertEqual(
            {
                1: [(2, 20), (4, 20)],
                2: [(1, 20), (3, 20), (5, 10)],
                3: [(2, 20), (6, 20)],
                6: [(3, 20), (9, 20), (5, 10)],
                9: [(6, 20), (8, 20)],
                8: [(9, 20), (7, 20), (5, 10)],
                7: [(8, 20), (4, 20)],
                4: [(7, 20), (1, 20), (5, 10)],
                5: [(2, 10), (4, 10), (6, 10), (8, 10)]
            }, self.secondGraph.connections)

        self.assertEqual(
            {
                1: [(2, 50)],
                2: [(1, 50), (3, 1000000000)],
                3: [(2, 1000000000)]
            }, self.thirdGraph.connections)

    def test_graph_wrong_inputs(self):
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, '1', 2,
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, '2',
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, 2,
                          '3')
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1.5, 2,
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, 2.5,
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, 2,
                          3.5)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, {1}, 2,
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, {2},
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, 2,
                          {3})
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, [1], 2,
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, [2],
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, 2,
                          [3])
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, (1, ), 2,
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, (2, ),
                          3)
        self.assertRaises(TypeError,
                          self.firstGraph.create_edges_from_vertexes, 1, 2,
                          (3, ))
        self.assertRaises(ValueError,
                          self.firstGraph.create_edges_from_vertexes, 1, 2, -3)
Esempio n. 3
0
class DejkstraTest(unittest.TestCase):
    def setUp(self) -> None:
        self.firstGraph = Graph()

        self.firstGraph.create_edges_from_vertexes(1, 3, 10)
        self.firstGraph.create_edges_from_vertexes(3, 4, 80)
        self.firstGraph.create_edges_from_vertexes(4, 5, 50)
        self.firstGraph.create_edges_from_vertexes(5, 6, 20)
        self.firstGraph.create_edges_from_vertexes(2, 3, 40)
        self.firstGraph.create_edges_from_vertexes(2, 4, 100)

        self.secondGraph = Graph()

        self.secondGraph.create_edges_from_vertexes(1, 2, 20)
        self.secondGraph.create_edges_from_vertexes(2, 3, 20)
        self.secondGraph.create_edges_from_vertexes(3, 6, 20)
        self.secondGraph.create_edges_from_vertexes(6, 9, 20)
        self.secondGraph.create_edges_from_vertexes(9, 8, 20)
        self.secondGraph.create_edges_from_vertexes(8, 7, 20)
        self.secondGraph.create_edges_from_vertexes(7, 4, 20)
        self.secondGraph.create_edges_from_vertexes(4, 1, 20)
        self.secondGraph.create_edges_from_vertexes(5, 2, 10)
        self.secondGraph.create_edges_from_vertexes(5, 4, 10)
        self.secondGraph.create_edges_from_vertexes(5, 6, 10)
        self.secondGraph.create_edges_from_vertexes(5, 8, 10)

        self.thirdGraph = Graph()

        self.thirdGraph.create_edges_from_vertexes(1, 2, 50)
        self.thirdGraph.create_edges_from_vertexes(2, 3, 1000000000)

    def test_dejkstra(self):
        self.assertRaises(ValueError, dejkstra_algorithm, self.firstGraph, 0)
        self.assertEqual({
            1: 0,
            3: 10,
            4: 90,
            5: 140,
            6: 160,
            2: 50
        }, dejkstra_algorithm(self.firstGraph, 1))
        self.assertEqual({
            1: 50,
            3: 40,
            4: 100,
            5: 150,
            6: 170,
            2: 0
        }, dejkstra_algorithm(self.firstGraph, 2))
        self.assertEqual({
            1: 10,
            3: 0,
            4: 80,
            5: 130,
            6: 150,
            2: 40
        }, dejkstra_algorithm(self.firstGraph, 3))
        self.assertEqual({
            1: 90,
            3: 80,
            4: 0,
            5: 50,
            6: 70,
            2: 100
        }, dejkstra_algorithm(self.firstGraph, 4))
        self.assertEqual({
            1: 140,
            3: 130,
            4: 50,
            5: 0,
            6: 20,
            2: 150
        }, dejkstra_algorithm(self.firstGraph, 5))
        self.assertEqual({
            1: 160,
            3: 150,
            4: 70,
            5: 20,
            6: 0,
            2: 170
        }, dejkstra_algorithm(self.firstGraph, 6))