--- lang: fr tags: theorie des graphs, S6, ING1 title: Theorie des graphs 7 date: 26/03/2019 --- # Theorie des graphs 7 ## ALgo d'edmonds pour la recherche de chemin améliorant un couplage M (Edmonds' blossoms algorithm) ```python= def find_augmenting_path(G=(V, E), M): # 1. Etiqueter chaque sommet x libre libres (ne touchent pas M) # par [R, x, x] # 2. Tant qu'il existe un sommet x d'étiquette [R, r, p] avec # une arrête (x, y) non visitée: # a) Marqué (x, y) comme visitée # b) Si y n'a pas d'étiquette (alors y touche M) # soit (y, z) l'arete de M qui touche y # étiqueter y par [B, r, x] # étiqueter z par [R, r, y] # c) Si y est B, ne rien faire # d) si y a pour étiquette [R, r', p'] # i) si r != r' # Construire le chemin P de r à x # construire le chemin P' de r' à y # Retourner concat(P, reverse(P')) # ii) Si r == r' // on a trouvé un cycle de taille impair autour de y # créer le graph G' dans leqel le cycle de taille impair est compréssé en un seul sommet (un bourgeon) # P' = find_augmenting_path(G', M) # si P' = []: return [] # construire à partir de P' en transformant le bourgeau par un chemin de taille paire. # Retourner P # Retourner [] ``` Chaque sommet est étiqueté par un triplet et une couleur.