def readUndirectedGraph(filename): ''' the information about a graph is read from a given textfile and the graph is created :param filename: the given file :return: the read graph raises ValueError if file not found ''' try: with open(filename, "r") as file: lines = file.readlines() lines[0] = lines[0].strip("\n") graphVerticesAndEdges = lines[0].split(" ") numberOfVertices = int(graphVerticesAndEdges[0]) numberOfEdges = int(graphVerticesAndEdges[1]) graph = UndirectedGraph(numberOfVertices, numberOfEdges) lines = lines[1:] for line in lines: line = line.strip("\n") edge = line.split(" ") vertex1 = int(edge[0]) vertex2 = int(edge[1]) cost = int(edge[2]) graph.addEdge(vertex1, vertex2, cost) except: raise ValueError("File not found") return graph
def readGraph(file): graph_file = open(file, 'r') graph = None for line_no, line in enumerate(graph_file): if line_no == 0: matrix_size = int(line) graph = UndirectedGraph(matrix_size) else: line = line.strip() for col_no, col in enumerate(line): if col == "1": graph.addEdge(line_no - 1, col_no) line_no += 1 graph_file.close() return graph
def setUp(self): graph = UndirectedGraph(7) graph.addEdge(0, 1) graph.addEdge(1, 2) graph.addEdge(1, 3) graph.addEdge(1, 4) graph.addEdge(4, 5) graph.addEdge(4, 6) graph.addEdge(0, 4) self.solver = DFSSolver(graph)
def setUp(self): graph = UndirectedGraph(7) graph.addEdge(0, 1) graph.addEdge(1, 2) graph.addEdge(1, 3) graph.addEdge(1, 4) graph.addEdge(4, 5) graph.addEdge(4, 6) graph.addEdge(0, 4) self.solver = DFSSolver(graph)
def test_findBestSolutionFor10(self): graph = UndirectedGraph(10) graph.addEdge(0, 4) graph.addEdge(0, 5) graph.addEdge(0, 6) graph.addEdge(0, 8) graph.addEdge(0, 9) graph.addEdge(1, 2) graph.addEdge(1, 3) graph.addEdge(1, 5) graph.addEdge(1, 6) graph.addEdge(1, 7) graph.addEdge(1, 8) graph.addEdge(2, 6) graph.addEdge(2, 7) graph.addEdge(2, 9) graph.addEdge(3, 5) graph.addEdge(3, 6) graph.addEdge(3, 7) graph.addEdge(4, 5) graph.addEdge(4, 6) graph.addEdge(4, 8) graph.addEdge(4, 9) graph.addEdge(5, 9) graph.addEdge(6, 7) graph.addEdge(6, 9) graph.addEdge(7, 8) solver = DFSSolver(graph) # self.solver.DEBUG = True solution, price = solver.findBestSolution() self.assertEqual(2, price) expected = [Edge(0, 9), Edge(1, 2), Edge(1, 3), Edge(3, 5), Edge(4, 5), Edge(4, 8), Edge(6, 7), Edge(6, 9), Edge(7, 8)] self.assertEqual(set(expected), set(solution.edgeList()))
class TestUndirectedGraph(unittest.TestCase): def setUp(self): self.graph = UndirectedGraph(5) def test_vertexCount(self): vertices = self.graph.vertexCount() self.assertTrue(vertices == 5) def test_addEdge(self): self.graph.addEdge(1, 4) self.graph.addEdge(0, 4) self.assertTrue(self.graph.areConnected(0, 4)) self.assertTrue(self.graph.areConnected(4, 0)) self.assertTrue(self.graph.areConnected(1, 4)) self.assertTrue(self.graph.areConnected(4, 1)) self.assertFalse(self.graph.areConnected(0, 1)) def test_adjacentEdges(self): self.graph.addEdge(0, 1) self.graph.addEdge(0, 3) self.graph.addEdge(1, 4) adj_0 = self.graph.adjacentEdges(0) adj_1 = self.graph.adjacentEdges(1) self.assertEqual([Edge(0, 1), Edge(0, 3)], adj_0) self.assertEqual([Edge(0, 1), Edge(1, 4)], adj_1) def test_edgeCandidates(self): self.graph.addEdge(0, 1) self.graph.addEdge(1, 2) self.graph.addEdge(1, 3) self.graph.addEdge(1, 4) self.graph.addEdge(2, 3) self.graph.addEdge(0, 4) tree = SpanningTree(5) tree.addEdge(Edge(0, 1)) actual = self.graph.edgeCandidates(tree) expected = [Edge(1, 2), Edge(1, 3), Edge(1, 4), Edge(0, 4)] self.assertEqual(set(expected), set(actual)) def test_str(self): self.graph.addEdge(0, 1) self.graph.addEdge(0, 3) self.graph.addEdge(1, 4) str = self.graph.__str__() expected = """ | 0 1 2 3 4\n-|-----------\n0| 0 1 0 1 0\n1| 1 0 0 0 1\n2| 0 0 0 0 0\n3| 1 0 0 0 0\n4| 0 1 0 0 0\n""" self.assertEqual(expected, str) if __name__ == '__main__': unittest.main()
class TestUndirectedGraph(unittest.TestCase): def setUp(self): self.graph = UndirectedGraph(5) def test_vertexCount(self): vertices = self.graph.vertexCount() self.assertTrue(vertices == 5) def test_addEdge(self): self.graph.addEdge(1, 4) self.graph.addEdge(0, 4) self.assertTrue(self.graph.areConnected(0, 4)) self.assertTrue(self.graph.areConnected(4, 0)) self.assertTrue(self.graph.areConnected(1, 4)) self.assertTrue(self.graph.areConnected(4, 1)) self.assertFalse(self.graph.areConnected(0, 1)) def test_adjacentEdges(self): self.graph.addEdge(0, 1) self.graph.addEdge(0, 3) self.graph.addEdge(1, 4) adj_0 = self.graph.adjacentEdges(0) adj_1 = self.graph.adjacentEdges(1) self.assertEqual({Edge(0, 3), Edge(0, 1)}, adj_0) self.assertEqual({Edge(0, 1), Edge(1, 4)}, adj_1) def test_edgeCandidates(self): self.graph.addEdge(0, 1) self.graph.addEdge(1, 2) self.graph.addEdge(1, 3) self.graph.addEdge(1, 4) self.graph.addEdge(2, 3) self.graph.addEdge(0, 4) tree = SpanningTree(5) tree.addEdge(Edge(0, 1)) actual = self.graph.edgeCandidates(tree) expected = {Edge(1, 2), Edge(1, 3), Edge(1, 4), Edge(0, 4)} self.assertEqual(expected, actual) def test_str(self): self.graph.addEdge(0, 1) self.graph.addEdge(0, 3) self.graph.addEdge(1, 4) str = self.graph.__str__() expected = """ | 0 1 2 3 4\n-|-----------\n0| 0 1 0 1 0\n1| 1 0 0 0 1\n2| 0 0 0 0 0\n3| 1 0 0 0 0\n4| 0 1 0 0 0\n""" self.assertEqual(expected, str) if __name__ == '__main__': unittest.main()
def test_findBestSolutionFor10(self): graph = UndirectedGraph(10) graph.addEdge(0, 4) graph.addEdge(0, 5) graph.addEdge(0, 6) graph.addEdge(0, 8) graph.addEdge(0, 9) graph.addEdge(1, 2) graph.addEdge(1, 3) graph.addEdge(1, 5) graph.addEdge(1, 6) graph.addEdge(1, 7) graph.addEdge(1, 8) graph.addEdge(2, 6) graph.addEdge(2, 7) graph.addEdge(2, 9) graph.addEdge(3, 5) graph.addEdge(3, 6) graph.addEdge(3, 7) graph.addEdge(4, 5) graph.addEdge(4, 6) graph.addEdge(4, 8) graph.addEdge(4, 9) graph.addEdge(5, 9) graph.addEdge(6, 7) graph.addEdge(6, 9) graph.addEdge(7, 8) solver = DFSSolver(graph) # self.solver.DEBUG = True solution, price = solver.findBestSolution() self.assertEqual(2, price) expected = [Edge(0, 9), Edge(1, 2), Edge(1, 3), Edge(3, 5), Edge(4, 5), Edge(4, 8), Edge(6, 7), Edge(6, 9), Edge(7, 8)] self.assertEqual(set(expected), set(solution.edgeList()))