# OLA, TP 1 Rappels de Python : Pour définir une variable: ```python= my_var = 12 ``` Pour définir une fonction: ```python= def f(i): if i < 0: return True else: return False ``` ## Exercice 1: 1. Représentation en Python du graphe Correction : ```python = exemple_matrice = [[0, 1, 1, 0, 1, 0, 0, 0], #0 [0, 0, 0, 1, 0, 1, 0, 0], #1 [0, 0, 0, 1, 0, 0, 1, 0], #2 [0, 0, 0, 0, 0, 0, 0, 1], #3 [0, 0, 0, 0, 0, 1, 1, 0], #4 [0, 0, 0, 0, 0, 0, 0, 1], #5 [0, 0, 0, 0, 0, 0, 0, 1], #6 [0, 0, 0, 0, 0, 0, 0, 0]] #7 exemple_liste = [[1, 2, 4], [3, 5], [3, 6], [7], [5, 6], [7], [7], []] ``` 2. Question 2 ```python= def compte_sommet(g): return len(g) def compte_arete_m(g): nb=0 for i in range(len(g)): for j in range (len(g)): nb+=g[i][j] return nb print(compte_arete_m(exemple_matrice)) def compte_arete_l(g): nb=0 for i in range(len(g)): nb+=len(g[i]) return nb print(compte_arete_l(exemple_liste)) ``` 3. Question 3: ```python= def adjacents_matrice(g,i,j): return g[i][j]==1 or g[j][i]==1 def adjacents_liste(g,i,j): return j in g[i] or i in g[j] ``` 4. Question 4: ```python= def successeurs_matrice(g, s): l=[] for i in range(len(g)): if g[s][i]==1: l.append(i) return l def successeurs_liste(g, s): return g[s] ``` 5. Question 5 : ```python= def predecesseurs_matrice(g, s): l=[] for i in range(len(g)): if g[i][s]==1: l.append(i) return l def predecesseurs_liste(g, s): l=[] for i in range(len(g)): if s in g[i]: l.append(i) return l ``` 6. Question 6 : réflexif ```python= def reflexif_m(g): for i in range(len(g)): if not g[i][i]==1: return False return True def reflexif_l(g): for i in range(len(g)): if not (i in g[i]): return False return True ``` 7. Question 7 : symétrique ```python= def symetrique_m(g): for i in range(len(g)): for j in range(len(g)): if g[i][j]==1: if g[j][i]==0: return False return True print(symetrique_m(g)) def symetrique_l(g): for i in range(len(g)): for j in g[i]: if not i in g[j]: return False return True ``` 8. Symétrisation ```python= def symetrisation_m(g): for i in range(len(g)): for j in range(len(g)): if g[i][j]==1: g[j][i]=1 def symetrisation_l(g): for i in range (len(g)): for j in g[i]: if not i in g[j]: g[j].append(i) ``` 9. Transitif ```python= def transitif_matrice(g): for i in range(len(g)): for j in successeurs_matrice(g, i): for k in successeurs_matrice(g, k): if not g[i][k]: return False return True def transitif_liste(g): for i in range(len(g)): for j in g[i]: for k in g[j]: if not k in g[i]: return False return True ``` Code d'Ariane ```python= #Q1 #a) Matrice g1 = [[False, True, True, False, True, False, False, False], [False, False, False, True, False, True, False, False], [False, False, False, True, False, False, True, False], [False, False, False, False, False, False, False, True], [False, False, False, False, False, True, True, False], [False, False, False, False, False, False, False, True], [False, False, False, False, False, False, False, True], [False, False, False, False, False, False, False, False]] #b) Liste g2 = [[1, 2, 4], [3, 5], [3, 6], [7], [5, 6], [7], [7], []] #Q2 #a) def compte_sommets(g): return len(g) def compte_aretes_m(g): nb = 0 for i in range(len(g)): # de 0 à len(g)-1 for j in range(len(g)): if g[i][j]: nb+=1 return nb def compte_aretes_l(g): nb = 0 for i in range(len(g)): nb+=len(g[i]) return nb #Q3 #a) def adjacents_m(g, i, j): return g[i][j] or g[j][i] #b) def adjacents_l(g, i, j): return (i in g[j]) or (j in g[i]) #Q4 #a) def successeurs_m(g, s): res=[] for i in range(len(g)): if g[s][i]: res.append(i) return res #b) def successeurs_l(g, s): return g[s] #Q5 #a) def predecesseurs_m(g, s): res=[] for i in range(len(g)): if g[i][s]: res.append(i) return res #b) def predecesseurs_l(g, s): res=[] for i in range(len(g)): if s in g[i]: res.append(i) return res #Q6 #a) def reflexif_m(g): for i in range(len(g)): if not g[i][i]: return False return True #b) def reflexif_l(g): for i in range(len(g)): if not (i in g[i]): return False return True #Q7 #a) def symetrique_m(g): for i in range(len(g)): for j in range(len(g)): if g[i][j]: if not g[j][i]: return False return True #b) def symetrique_l(g): for i in range(len(g)): for j in range(len(g)): if j in g[i]: if not i in g[i]: return False return True #Q8 #a) def symetrisation_m(g): for i in range(len(g)): for j in range(len(g)): if g[i][j]: g[j][i]=True #b) def symetrisation_l(g): for i in range(len(g)): for j in g[i]: if not i in g[j]: g[j].append(i) #Q9 #a) def transitif_m(g): for i in range(len(g)): for j in successeurs_m(g, i): for k in successeurs_m(g, j): if not g[i][k]: return False return True #b) def transitif_l(g): for i in range(len(g)): for j in g[i]: for k in g[j]: if not k in g[i]: return False return True ``` Señor Alexis : ```python= # Q1 g_M = [[False, True, True, False, True, False, False, False], [False, False, False, True, False, True, False, False], [False, False, False, True, False, False, True, False], [False, False, False, False, False, False, False, True], [False, False, False, False, False, True, True, False], [False, False, False, False, False, False, False, True], [False, False, False, False, False, False, False, True], [False, False, False, False, False, False, False, False]] g_L = [[1, 2, 4], [3, 5], [3, 6], [7], [6, 5], [7], [7], []] # Q2 def compte_sommets(g): return len(g) def compte_aretes_matrice(g): nb_aretes = 0 for s in g: for a in s: if a is True: nb_aretes += 1 return nb_aretes def compte_aretes_liste(g): nb_aretes = 0 for s in g: nb_aretes+=len(s) return nb_aretes # Q3 def adjacents_matrice(g,i,j): return g[i][j] or g[j][i] def adjacents_liste(g,i,j): return j in g[i] or i in g[j] # Q4 def successeurs_matrice(g,s): successeurs = [] for index_a, a in enumerate(g[s]): if a is True: successeurs.append(index_a) return successeurs def successeurs_list(g,s): return g[s] # Q5 def predecesseurs_matrice(g, s): predecesseurs = [] for index_v,v in enumerate(g): if v[s] is True: predecesseurs.append(index_v) return predecesseurs def predecesseurs_list(g, s): predecesseurs = [] for index_v, v in enumerate(g): if s in v: predecesseurs.append(index_v) return predecesseurs # Q6 def reflexif_matrice(g): for index_v, v in enumerate(g): if v[index_v] is False: return False return True def reflexif_list(g): for index_v, v in enumerate(g): if index_v not in v: return False return True # Q7 def symetrique_matrice(g): for i in range(len(g)): for j in range(len(g[i])): if g[i][j] is True: if g[j][i] is False: return False return True def symetrique_list(g): for index_s, s in enumerate(g): for v in s: if index_s not in g[v]: return False return True # Q8 def symetrisation_matrice(g): for s1, s in enumerate(g): for s2, a in enumerate(s): if a is True: g[s2][s1] = True; return g def symetrisation_list(g): for s1, s in enumerate(g): for s2 in s: g[s2].append(s1) return g # Q9 (Brut) def transitif_matrice(g): for i in range(len(g)): for j in range(len(g[i])): for k in range(g[i][j]): if g[i][j] is True and g[j][k] is True: if g[i][k] is False: return False return True ``` Jacobo ```python= #1 #graphe_M= deja fait par les autres. graphe_L = [[1,2,4], [3,5], [3,6], [7], [6,5], [7], [7], []] #2 def compte_somets(graphe): return len(graphe) def compte_aretes_L(graphe): res=0 for i in range (len(graphe)): res += len(graphe[i]) return res def compte_aretes_M(graphe) sum=0 for sommet in graphe: for i in sommet: if i==True: sum+=1 return sum #3 def adjacents_M(g, i, j) return g[i][j] or g[j][i] def adjacents_L(g, i,j) for t in g[i]: if t == j: return true for x in g[j]: if x == i: return true return false #return j in g[i] or i in g[j] OP #4 def succeseurs_L(g, s) return g[s] def succeseurs_M(g, s) res = [] for i in range len(g[s]): if g[i]: res.append(i) return res #5 def predecesseurs_L(g, s): res=[] for i in range compte_sommets(g): if s in g[i]: res.append(i) return res def predecesseurs_M(g,s) res=[] for i in range compte_sommets(g): if g[s]: res.append(i) return res def reflexif_L(g) for i in range len(g): if !(i in g[i]): return False return True def reflexif_M(g) for i in range len(g): if !g[i][i]: return False return True #7 def symetrique_L(g) for i in range len(g): for j in range len(i): if !(j in g[i] and i in g[j]): return False return True def symetrique_M(g) for i in range len(g): for j in range len(i): if !(g[i][j] and g[j][i]) return False return True def symetrisation_L(g) for i in range len(g): for j in range len(i): if !(j in g[i] and i in g[j]): res = g[] return res def symetrisation_M(g) # ``` Brahim ```python= g = [[False,True,True,False,True,False,False,False], [False,False,False,True,False,False,True,False], [False,False,False,False,False,False,False,True], [False,False,False,False,False,True,True,False],.. ... ] g = [[1,2,4], [3,5], [3,6], [7], [5,6], [7], [7], []] def compte_sommet(g): return len(g) def compte_arete(g): res=0 for i in range (len(g)): for j in range(len(g[i])): if g[i][j] == True then : res=res+1 return res def adjacents(la,i,j): b=False for k in range(len(la(i))): if k ==j : b=True for k in range(len(la(j)): if k==i : b=True return b def sucesseurs(g,s): l=[] for i in range(len(g[s])): if g[s][i]: l.append(i) return l def predecesseurs(g,s): l=[] for i in range(len(g)): for j in range(len(g[i])): if j==s and g[i][s] : l.append(i) return l def reflexif(g): for i in range(len(g)): if not(g[i][i]): return False return True def symetrique(g): for i in range(len(g)): for j in range(len(g[i])): if g[i][j] and not(g[j][i]): return False return True def symetrisation(g): g_prime=g for i in range(len(g)): for j in range(len(g[i])): if g[i][j] and not(g[j][i]): g_prime[j][i]=True return g_prime ``` Rachad ```python= Q1) exemple_matrice = [[0, 1, 1, 0, 1, 0, 0, 0], #0 [0, 0, 0, 1, 0, 1, 0, 0], #1 [0, 0, 0, 1, 0, 0, 1, 0], #2 [0, 0, 0, 0, 0, 0, 0, 1], #3 [0, 0, 0, 0, 0, 1, 1, 0], #4 [0, 0, 0, 0, 0, 0, 0, 1], #5 [0, 0, 0, 0, 0, 0, 0, 1], #6 [0, 0, 0, 0, 0, 0, 0, 0]] #7 Q2) def compte_sommet(g): return len(g) def nbr_arrete(graphe): return sum([sum(i) for i in graphe ]) #output=12 Q3): def adjacent(graphe,first,second): Q4): def Succeseur(graphe,sommet): """ Succeseur(g,2) =[3, 6]""" return [som for som in range(8) if g[sommet][som]] #len(g) =8 Q5) def predecesseurs(graphe,sommet): return [som for som in range(8) if g[som][sommet]] #len(g) =8 Q6) def reflexive(graphe): """1 case de la diagonale =1 <=> True""" return any([g[e][e] for e in range(8)]) #len(g) =8 Q7) def symetrique(graphe): nb=len(graphe) return all([graphe[i][j]==graphe[j][i] for i in range(nb) for j in range(nb) ]) Q8) def symetrisation(graphe): nb=len(graphe) for i in range(nb): for j in range(nb): if graphe[i][j]==1: graphe[j][i]=1 return graphe Q9) def transitif(graphe): pass #---------Fonction annexe------------------------------- def createMiniListe(Liste): init=[False]*8 for i in Liste: init[i]=True return init def m12(listeadja): MatriceAdja=[] for i in listeadja: MatriceAdja.append(createMiniListe(i)) return MatriceAdja #---------------------------------------- def getIndex(miniListe): init=[] for e,i in enumerate(miniListe): if i: init.append(e) return init def m21(MatriceAdja): init=[] for i in MatriceAdja: init.append(getIndex(i)) return init Q10) def verifie_chemin(graphe,c): None not in g[c] ``` Brice Q1) g1 = [[False, True, True, False, True, False, False, False], #0 [False, False, False, True, False, True, False, False], #1 [False, False, False, True, False, False, True, False], #2 [False, False, False,False, False, False, False, True], #3 [False, False, False, False, False, True, True, False], #4 [False, False, False, False, False, False, False, True], #5 [False, False, False, False, False, False, False, True], #6 [False, False, False, False, False, False, False, False]] #7 g1liste = [[1,2,4], #0 [3, 5], #1 [3, 6], #2 [7], #3 [5, 6], #4 [7], #5 [7], #6 []] #7