def test_caminho_euleriano(self): self.assertTrue(Grafo.caminho_euleriano(self.konigsberg_mod)) self.assertTrue(Grafo.caminho_euleriano(self.g_c_e)) self.assertTrue(Grafo.caminho_euleriano(self.codcad)) self.assertTrue(Grafo.caminho_euleriano(self.eulergraph)) self.assertFalse(Grafo.caminho_euleriano(self.konigsberg)) self.assertFalse(Grafo.caminho_euleriano(self.g_p)) self.assertFalse(Grafo.caminho_euleriano(self.g_p_sem_paralelas)) self.assertFalse(Grafo.caminho_euleriano(self.g_c))
class TestEuler(unittest.TestCase): def setUp(self): self.judA = Grafo([], []) # grafo com caminho euleriano, com vertices de grau ímpar no começo. for i in ['T', 'B', 'M', 'R']: self.judA.adiciona_vertice(i) for i in ['M-T', 'M-T', 'M-B', 'M-B', 'M-R', 'M-R', 'B-R', 'T-R']: self.judA.adiciona_aresta(i) self.judB = Grafo([], []) # grafo com caminho euleriano, com vertices apenas de grau par. for i in ['T', 'B', 'M', 'R']: self.judB.adiciona_vertice(i) for i in ['M-T', 'M-T', 'M-B', 'M-B', 'M-R', 'M-R']: self.judB.adiciona_aresta(i) self.grafo_3 = Grafo([], []) for i in ['A', 'B', 'C', 'D']: self.grafo_3.adiciona_vertice(i) for i in ['A-B', 'A-C', 'B-D', 'D-D', 'C-C']: self.grafo_3.adiciona_aresta(i) # Pontes de Konigsberg self.konigsberg = Grafo([], []) for i in ['M', 'T', 'B', 'R']: self.konigsberg.adiciona_vertice(i) for i in ['M-T', 'M-T', 'M-B', 'M-B', 'M-R', 'B-R', 'T-R']: self.konigsberg.adiciona_aresta(i) # Grafos com caminho euleriano self.konigsberg_mod = Grafo([], []) for i in ['M', 'T', 'B', 'R']: self.konigsberg_mod.adiciona_vertice(i) for i in ['M-T', 'M-T', 'M-B', 'M-B', 'M-R', 'M-R', 'B-R', 'T-R']: self.konigsberg_mod.adiciona_aresta(i) self.g_c_e = Grafo([], []) for i in ['A', 'B', 'C']: self.g_c_e.adiciona_vertice(i) for i in ['A-B', 'B-C']: self.g_c_e.adiciona_aresta(i) # Grafo da Paraíba self.g_p = Grafo([], []) for i in ['J', 'C', 'E', 'P', 'M', 'T', 'Z']: self.g_p.adiciona_vertice(i) for i in ['J-C', 'C-E', 'C-E', 'C-P', 'C-P', 'C-M', 'C-T', 'M-T', 'T-Z']: self.g_p.adiciona_aresta(i) # Grafo da Paraíba sem arestas paralelas self.g_p_sem_paralelas = Grafo([], []) for i in ['J', 'C', 'E', 'P', 'M', 'T', 'Z']: self.g_p_sem_paralelas.adiciona_vertice(i) for i in ['J-C', 'C-E', 'C-P', 'C-M', 'C-T', 'M-T', 'T-Z']: self.g_p_sem_paralelas.adiciona_aresta(i) # Grafos completos self.g_c = Grafo([], []) for i in ['J', 'C', 'E', 'P']: self.g_c.adiciona_vertice(i) for i in ['J-C', 'J-E', 'J-P', 'C-E', 'C-P', 'E-P']: self.g_c.adiciona_aresta(i) self.g_c2 = Grafo([], []) for i in ['J', 'C', 'E', 'P']: self.g_c2.adiciona_vertice(i) for i in ['J-C', 'E-J', 'J-P', 'E-C', 'C-P', 'P-E']: self.g_c2.adiciona_aresta(i) self.g_c3 = Grafo([], []) self.g_c3.adiciona_vertice('J') # Grafos com laco self.g_l1 = Grafo([], []) for i in ['A', 'B', 'C', 'D']: self.g_l1.adiciona_vertice(i) for i in ['A-A', 'B-A', 'A-A']: self.g_l1.adiciona_aresta(i) self.g_l2 = Grafo([], []) for i in ['A', 'B', 'C', 'D']: self.g_l2.adiciona_vertice(i) for i in ['A-B', 'B-B', 'B-A']: self.g_l2.adiciona_aresta(i) self.g_l3 = Grafo([], []) for i in ['A', 'B', 'C', 'D']: self.g_l3.adiciona_vertice(i) for i in ['C-A', 'C-C', 'D-D']: self.g_l3.adiciona_aresta(i) self.g_l4 = Grafo([], []) self.g_l4.adiciona_vertice('D') self.g_l4.adiciona_aresta('D-D') self.g_l5 = Grafo([], []) for i in ['C', 'D']: self.g_l5.adiciona_vertice(i) for i in ['D-C', 'C-C']: self.g_l5.adiciona_aresta(i) def test_caminho_euleriano(self): self.assertTrue(self.konigsberg_mod.caminho_euleriano()) self.assertTrue(self.g_c_e.caminho_euleriano()) self.assertTrue(self.grafo_3.caminho_euleriano()) self.assertTrue(self.judA.caminho_euleriano()) self.assertTrue(self.judB.caminho_euleriano()) self.assertFalse(self.konigsberg.caminho_euleriano()) self.assertFalse(self.g_p.caminho_euleriano()) self.assertFalse(self.g_p_sem_paralelas.caminho_euleriano()) self.assertFalse(self.g_c.caminho_euleriano()) def test_caminho_euleriano_path(self): self.assertEqual(self.konigsberg_mod.caminho_euleriano_path(), ['T', 'a7', 'R', 'a5', 'M', 'a1', 'T', 'a2', 'M', 'a3', 'B', 'a8', 'R', 'a6', 'M', 'a4', 'B']) self.assertEqual(self.g_c_e.caminho_euleriano_path(), ['A', 'a1', 'B', 'a2', 'C']) self.assertEqual(self.grafo_3.caminho_euleriano_path(), ['C', 'a2', 'A', 'a1', 'B', 'a3', 'D']) self.assertEqual(self.judA.caminho_euleriano_path(), ['T', 'a1', 'M', 'a7', 'R', 'a3', 'T', 'a2', 'M', 'a8', 'R', 'a6', 'B', 'a4', 'M', 'a5', 'B']) self.assertEqual(self.judB.caminho_euleriano_path(), ['T', 'a1', 'M', 'a5', 'R', 'a6', 'M', 'a3', 'B', 'a4', 'M', 'a2', 'T']) self.assertFalse(self.konigsberg.caminho_euleriano_path()) self.assertFalse(self.g_p.caminho_euleriano_path()) self.assertFalse(self.g_p_sem_paralelas.caminho_euleriano_path()) self.assertFalse(self.g_c.caminho_euleriano_path())
from grafo_adj_nao_dir import Grafo g = Grafo([], []) for i in ['a','b','c','d','e','f','g']: g.adiciona_vertice(i) for i in ['a-e','a-f','a-f','a-g','b-e','b-d','b-d','b-f','d-e','e-g']: g.adiciona_aresta(i) print(g.caminho_euleriano())
class TestEuler(unittest.TestCase): def setUp(self): # Pontes de Konigsberg self.konigsberg = Grafo([], []) for i in ['M', 'T', 'B', 'R']: self.konigsberg.adiciona_vertice(i) for i in ['M-T', 'M-T', 'M-B', 'M-B', 'M-R', 'B-R', 'T-R']: self.konigsberg.adiciona_aresta(i) # Grafos com caminho euleriano self.konigsberg_mod = Grafo([], []) for i in ['M', 'T', 'B', 'R']: self.konigsberg_mod.adiciona_vertice(i) for i in ['M-T', 'M-T', 'M-B', 'M-B', 'M-R', 'M-R', 'B-R', 'T-R']: self.konigsberg_mod.adiciona_aresta(i) self.g_c_e = Grafo([], []) for i in ['A', 'B', 'C']: self.g_c_e.adiciona_vertice(i) for i in ['A-B', 'B-C']: self.g_c_e.adiciona_aresta(i) # Grafo da Paraíba self.g_p = Grafo([], []) for i in ['J', 'C', 'E', 'P', 'M', 'T', 'Z']: self.g_p.adiciona_vertice(i) for i in [ 'J-C', 'C-E', 'C-E', 'C-P', 'C-P', 'C-M', 'C-T', 'M-T', 'T-Z' ]: self.g_p.adiciona_aresta(i) # Grafo da Paraíba sem arestas paralelas self.g_p_sem_paralelas = Grafo([], []) for i in ['J', 'C', 'E', 'P', 'M', 'T', 'Z']: self.g_p_sem_paralelas.adiciona_vertice(i) for i in ['J-C', 'C-E', 'C-P', 'C-M', 'C-T', 'M-T', 'T-Z']: self.g_p_sem_paralelas.adiciona_aresta(i) # Grafos completos self.g_c = Grafo([], []) for i in ['J', 'C', 'E', 'P']: self.g_c.adiciona_vertice(i) for i in ['J-C', 'J-E', 'J-P', 'C-E', 'C-P', 'E-P']: self.g_c.adiciona_aresta(i) self.g_c2 = Grafo([], []) for i in ['J', 'C', 'E', 'P']: self.g_c2.adiciona_vertice(i) for i in ['J-C', 'E-J', 'J-P', 'E-C', 'C-P', 'P-E']: self.g_c2.adiciona_aresta(i) self.g_c3 = Grafo([], []) self.g_c3.adiciona_vertice('J') # Grafos com laco self.g_l1 = Grafo([], []) for i in ['A', 'B', 'C', 'D']: self.g_l1.adiciona_vertice(i) for i in ['A-A', 'B-A', 'A-A']: self.g_l1.adiciona_aresta(i) self.g_l2 = Grafo([], []) for i in ['A', 'B', 'C', 'D']: self.g_l2.adiciona_vertice(i) for i in ['A-B', 'B-B', 'A-B']: self.g_l2.adiciona_aresta(i) self.g_l3 = Grafo([], []) for i in ['A', 'B', 'C', 'D']: self.g_l3.adiciona_vertice(i) for i in ['A-C', 'C-C', 'D-D']: self.g_l3.adiciona_aresta(i) self.g_l4 = Grafo([], []) self.g_l4.adiciona_vertice('D') self.g_l4.adiciona_aresta('D-D') self.g_l5 = Grafo([], []) for i in ['C', 'D']: self.g_l5.adiciona_vertice(i) for i in ['C-D', 'C-C']: self.g_l5.adiciona_aresta(i) self.g_16 = Grafo([], []) for i in ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']: self.g_16.adiciona_vertice(i) for i in [ 'a-c', 'a-c', 'a-e', 'a-f', 'a-g', 'a-h', 'b-d', 'b-g', 'c-h', 'c-h', 'd-e', 'd-f', 'e-f', 'f-g', 'g-h' ]: self.g_16.adiciona_aresta(i) self.g_17 = Grafo([], []) for i in ['a', 'b', 'c', 'd', 'e', 'f', 'g']: self.g_17.adiciona_vertice(i) for i in [ 'a-b', 'a-c', 'a-f', 'a-g', 'b-c', 'b-f', 'b-g', 'c-d', 'c-e', 'c-f', 'c-g', 'd-e', 'f-g' ]: self.g_17.adiciona_aresta(i) self.g_18 = Grafo([], []) for i in ['a', 'b', 'c', 'd', 'e']: self.g_18.adiciona_vertice(i) for i in ['a-b', 'a-d', 'b-c', 'b-e', 'c-d']: self.g_18.adiciona_aresta(i) self.g_19 = Grafo([], []) for i in ['C', 'D']: self.g_19.adiciona_vertice(i) for i in ['C-C', 'C-D']: self.g_19.adiciona_aresta(i) self.g_20 = Grafo([], []) for i in ['a', 'b', 'c', 'd', 'e', 'f', 'g']: self.g_20.adiciona_vertice(i) for i in [ 'a-e', 'a-f', 'a-f', 'a-g', 'b-e', 'b-d', 'b-d', 'b-f', 'd-e', 'e-g' ]: self.g_20.adiciona_aresta(i) def test_caminho_euleriano(self): self.assertTrue(self.konigsberg_mod.caminho_euleriano()) self.assertTrue(self.g_c_e.caminho_euleriano()) self.assertFalse(self.konigsberg.caminho_euleriano()) self.assertFalse(self.g_p.caminho_euleriano()) self.assertFalse(self.g_p_sem_paralelas.caminho_euleriano()) self.assertFalse(self.g_c.caminho_euleriano()) self.assertEqual(self.g_16.caminho_euleriano(), [ 'd', 'e', 'f', 'g', 'h', 'a', 'c', 'h', 'c', 'a', 'f', 'd', 'b', 'g', 'a', 'e' ]) self.assertEqual(self.g_17.caminho_euleriano(), [ 'a', 'b', 'c', 'd', 'e', 'c', 'f', 'g', 'a', 'c', 'g', 'b', 'f', 'a' ]) self.assertEqual(self.g_18.caminho_euleriano(), ['b', 'c', 'd', 'a', 'b', 'e']) self.assertEqual(self.g_19.caminho_euleriano(), ['C', 'D']) self.assertEqual( self.g_20.caminho_euleriano(), ['d', 'e', 'g', 'a', 'e', 'b', 'd', 'b', 'f', 'a', 'f'])