Good EXO FIN
This commit is contained in:
parent
319bcc46d7
commit
41f515d675
|
@ -83,9 +83,61 @@ def plus_ancienne_relation(personnes):
|
||||||
gens = (p1, p2)
|
gens = (p1, p2)
|
||||||
return gens
|
return gens
|
||||||
|
|
||||||
print(plus_ancienne_relation(exemple_reseau.values()))
|
# print(plus_ancienne_relation(exemple_reseau.values()))
|
||||||
|
|
||||||
def plus_de_relations(personnes):
|
def plus_de_relations(personnes):
|
||||||
return max(personnes, key=lambda p: len(p.relations))
|
return max(personnes, key=lambda p: len(p.relations))
|
||||||
|
|
||||||
print(plus_de_relations(exemple_reseau.values()))
|
# print(plus_de_relations(exemple_reseau.values()))
|
||||||
|
|
||||||
|
def search(personnes, personne, target, depth=1):
|
||||||
|
if depth > len(personnes):
|
||||||
|
return None
|
||||||
|
if target in personne.relations:
|
||||||
|
return depth
|
||||||
|
distances = [search(personnes, personnes[relation], target, depth+1) for relation in personne.relations]
|
||||||
|
distances = [distance for distance in distances if distance is not None]
|
||||||
|
if distances:
|
||||||
|
return min(distances)
|
||||||
|
|
||||||
|
def search(personnes, personne, target, depth=1):
|
||||||
|
# Condition d'arret
|
||||||
|
if depth > len(personnes):
|
||||||
|
return None
|
||||||
|
if target in personne.relations:
|
||||||
|
return depth, [personne, personnes[target]]
|
||||||
|
|
||||||
|
# On appelle récursivement pour toutes les relations
|
||||||
|
distances = []
|
||||||
|
for relation in personne.relations:
|
||||||
|
other = personnes[relation]
|
||||||
|
distance = search(personnes, other, target, depth + 1)
|
||||||
|
if distance is not None:
|
||||||
|
distances.append(distance)
|
||||||
|
|
||||||
|
# Autre méthode
|
||||||
|
# distances = [search(personnes, personnes[relation], target, depth + 1) for relation in personne.relations]
|
||||||
|
# distances = [distance for distance in distances if distance is not None]
|
||||||
|
|
||||||
|
# On trouve la liaison la plus courte
|
||||||
|
if distances:
|
||||||
|
distance, personnes = min(distances, key=lambda d: d[0])
|
||||||
|
return distance, [personne] + personnes
|
||||||
|
|
||||||
|
distance, personnes = search(exemple_reseau, exemple_reseau["Marc"], "Stéphanie")
|
||||||
|
print(f"La relation la plus courte entre Marc est Stéphanie est de {distance} relations:")
|
||||||
|
for personne in personnes:
|
||||||
|
print(f" - {personne}")
|
||||||
|
|
||||||
|
# On vérifie si des personnes ne sont pas reliées
|
||||||
|
checked = []
|
||||||
|
for personne in exemple_reseau.values():
|
||||||
|
for other in exemple_reseau.values():
|
||||||
|
if personne == other:
|
||||||
|
continue
|
||||||
|
two = sorted([personne.nom, other.nom])
|
||||||
|
if two in checked:
|
||||||
|
continue
|
||||||
|
checked.append(two)
|
||||||
|
if search(exemple_reseau, personne, other.nom) is None:
|
||||||
|
print(f"{personne.nom} et {other.nom} n'ont pas de liaison possible")
|
Loading…
Reference in a new issue