Commit c2ecc0b1 authored by Vincent-Xavier JUMEL's avatar Vincent-Xavier JUMEL 📚
Browse files

Merge branch 'master' of framagit.org:formation-nsi/projet-algo-du

parents 1a6b2ccb 120776dc
Pipeline #178996 passed with stages
in 3 minutes and 42 seconds
# projet-algo-du
projet d'algo pour le DIU
\ No newline at end of file
projet d'algo pour le DIU
La documentation du projet est auto-générée depuis les `docstrings` des fonctions et se trouve accessible sur
https://formation-nsi.frama.io/projet-algo-du/main.html
\ No newline at end of file
......@@ -68,6 +68,19 @@ dict_amis_numeros = {
# TODO: automatiser la génération de ce dictonnaire à partir du graphe
# précédent.
def cree_dict_classe_liste(dictionnaire):
"""
- Precondition dictionnaire est du type dict_amis_numeros:
{0: {20: 2, 15: 1}, 1: {18: 2, 13: 1}, 2: {17: 2, 7: 1} etc...}
- Post condition : Cette fonction cree un dictionnaire ou les cles sont les
numeros des eleves et les valeurs des listes de leurs amis
Exemple : {0: [20, 15], 1: [18, 13], 2: [17, 7],etc...}
"""
dictionnaire_liste={}
for sommet in dictionnaire:
dictionnaire_liste[sommet]=list(dictionnaire[sommet].keys())
return dictionnaire_liste
def cree_graphe_nx(gr):
"""
Prend un graphe donne sous forme de dictionnaire en entree
......@@ -99,6 +112,81 @@ def afficher_graphe(gr):
# TODO: voir le test. Je ne suis pas sur qu'il faille s'emmerder avec cette
# fonction.
def chemin_long_3(dictionnaire, start):
"""
Cette fonction retourne une liste de toutes les listes de chemins de
longueur 3 partant du sommet start
Precondition : dictionnaire est du type : {0: [20, 15], 1: [18, 13],etc}
Ce dictionnaire est cree par la fonction cree_dict_classe_liste(dict_amis_numeros)
Postcondition : retourne une liste de listes de chemins
Par exemple : pour le sommet 0 : [[0, 20, 25], [0, 20, 18], [0, 15, 19], [0, 15, 5]]
Test :
chemin_long_3(cree_dict_classe_liste(dict_amis_numeros), 0) retourne :
[[0, 20, 25], [0, 20, 18], [0, 15, 19], [0, 15, 5]]
"""
l0=[start]
l1=list(l0)
l2=list(l0)
l1.append(dictionnaire[start][0])
l2.append(dictionnaire[start][1])
l3=list(l1)
l4=list(l1)
l5=list(l2)
l6=list(l2)
l3.append(dictionnaire[l1[1]][0])
l4.append(dictionnaire[l1[1]][1])
l5.append(dictionnaire[l2[1]][0])
l6.append(dictionnaire[l2[1]][1])
l7=list(l3)
l8=list(l3)
l9=list(l4)
l10=list(l4)
l11=list(l5)
l12=list(l5)
l13=list(l6)
l14=list(l6)
l7.append(dictionnaire[l3[2]][0])
l8.append(dictionnaire[l3[2]][1])
l9.append(dictionnaire[l4[2]][0])
l10.append(dictionnaire[l4[2]][1])
l11.append(dictionnaire[l5[2]][0])
l12.append(dictionnaire[l5[2]][1])
l13.append(dictionnaire[l6[2]][0])
l14.append(dictionnaire[l7[2]][1])
liste=[l7,l8,l9,l10,l11,l12,l13,l14]
return liste
def tous_les_chemins_long_3(dictionnaire):
"""
- Precondition : dictionnaire est du type : {0: [20, 15], 1: [18, 13],etc}
Ce dictionnaire est cree par la fonction cree_dict_classe_liste(dict_amis_numeros)
- Postcondition : Exemple de liste retournée :
[[[0, 20, 25, 18], [0, 20, 25, 20], [0, 20, 18, 25], [0, 20, 18, 23], [0, 15, 19, 5], [0, 15, 19, 14], [0, 15, 5, 19], [0, 15, 5, 20]],
[[1, 18, 25, 18], [1, 18, 25, 20], [1, 18, 23, 8], etc...
"""
liste=[]
for sommet in dictionnaire:
liste.append(chemin_long_3(dictionnaire, sommet))
return liste
def cycles_longueur_3(liste_chemins):
"""
- Pre-condition : liste_chemin est du type retourne par la fonction tous_les_chemins_long_3(dictionnaire)
- Post-condition : retourne la liste de tous les chemins de longueur 3
qui sont des cycles.
Exemple : [[3, 24, 7, 3], [3, 7, 24, 3], [7, 24, 3, 7] etc...]
"""
liste_cycles=[]
for liste in liste_chemins:
for chemin in liste:
if chemin[0]==chemin[3]:
liste_cycles.append(chemin)
return liste_cycles
#La fonction ci-dessous est devenue inutile
def matr_chem_3(matrice):
"""
Retourne la matrice elevee a la puissance 3.
......@@ -106,8 +194,8 @@ def matr_chem_3(matrice):
produit matriciel. Il faut utiliser dot.
"""
return matrice @ matrice @ matrice
#La fonction ci-dessous est devenue inutile
def sommets_cycles_3(matrice):
"""
Retourne la liste des sommets appartenant a un cycle de mongueur 3
......@@ -223,4 +311,10 @@ def renvoyer_cycles(G: nx.classes.digraph.DiGraph) -> set: # Fonction a creer
if __name__ == '__main__':
afficher_graphe(exemple_graphe)
print(sommets_cycles_3(creation_matrice_adj(dict_amis_numeros)))
dictionnaire=cree_dict_classe_liste(dict_amis_numeros)
liste_chemins=tous_les_chemins_long_3(dictionnaire)
print(liste_chemins)
#print("tous les chemins de longueur 3",liste_chemins)
print("tous les cycles de longueur 3",cycles_longueur_3(liste_chemins))
# afficher_graphe(gr)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment