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
Esempio n. 3
0

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()