def Teste(): G = GrafoListaAdj(orientado = False) G.DefinirN(12) G.AdicionarAresta(1,7) G.AdicionarAresta(1,8) G.AdicionarAresta(1,9) G.AdicionarAresta(2,7) G.AdicionarAresta(2,8) G.AdicionarAresta(2,9) G.AdicionarAresta(3,7) G.AdicionarAresta(3,10) G.AdicionarAresta(3,11) G.AdicionarAresta(4,8) G.AdicionarAresta(5,10) G.AdicionarAresta(5,11) G.AdicionarAresta(5,12) G.AdicionarAresta(6,12) G.tV1 = 6 G.Desenhar("G.png") M = EmparelhamentoBipartido(G) for v in G.V(): if M[v] != None: for w_no in G.N(v, IterarSobreNo=True): if w_no.Viz == M[v]: G.DefinirAtrE(w_no, 'color=blue') G.Desenhar("G-M.png") print()
def ObterD(G, M): D = GrafoListaAdj(orientado = True) D.DefinirN(G.n+1) D.tV1 = G.tV1 D.Exp = [False]*(D.n+1) for v in range(1, D.n): D.Exp[v] = (M[v] == None) for v in range(1, G.tV1+1): if D.Exp[v]: D.AdicionarAresta(D.n, v) for w in G.N(v): if M[v] == w: D.AdicionarAresta(w,v) else: D.AdicionarAresta(v,w) return D
def DifSimetrica(M, P): """ M: emparelhamento, P: (arestas de) um caminho. Retorna a diferença simétrica de M por P """ MR = [v for v in M] for i in range(0, len(P), 2): MR[P[i]], MR[P[i + 1]] = P[i + 1], P[i] return MR G = GrafoListaAdj(orientado=False) E = [(1, 4), (2, 4), (3, 4), (3, 5), (3, 6), (3, 7)] G.DefinirN(7) for (u, v) in E: G.AdicionarAresta(u, v) G.tV1 = 3 M = EmparelhamentoBipartido(G) print(M) G = GrafoListaAdj(orientado=False) G.DefinirN(15) E = [(1, 8), (1, 9), (2, 8), (2, 9), (2, 10), (3, 9), (3, 10), (3, 11), (4, 10), (4, 11), (5, 11), (5, 12), (6, 11), (6, 13), (6, 14), (6, 15), (7, 14), (7, 15)] for (u, v) in E: G.AdicionarAresta(u, v) G.tV1 = 7 M = EmparelhamentoBipartido(G) print(M) G = GrafoListaAdj(orientado=False)
rlin = T[rlin] M = DifSimetrica(M, P) EXPOSTO[r] = False; EXPOSTO[rlin] = False par = [None] + [ EXPOSTO[v] for v in G.V() ] impar = [False]*(G.n+1) T = [None] + [ (v if EXPOSTO[v] else None) for v in G.V() ] E = G.E() (u,v) = next(E, (None, None)) return M def DifSimetrica(M, P): MR = [ v for v in M ] for i in range(0, len(P), 2): MR[P[i]], MR[P[i+1]] = P[i+1], P[i] return MR G = GrafoListaAdj(orientado = False) G.DefinirN(15) E = [(1,8),(1,9),(2,8),(2,10),(3,9),(3,10),(4,10),(4,11),(5,11),(5,12),(6,11),(6,13),(6,14),(6,15),(7,14),(7,15)] for (u,v) in E: G.AdicionarAresta(u,v) G.tV1 = 7 M = EmparelhamentoBipartidoMetodoHungaro(G) print (M) print()