# ============================ # Tracé d'un graphe # avec le module Turtle # Version 1 # # nsi.gecif.net # ============================ from turtle import * # ============================ # Définition des fonctions : # ============================ def afficher_message(message): # affiche un titre en haut de la fenêtre de la tortue : up() goto(-150,300) write(message) down() def dessiner_sommet(x,y,nom): # dessine un cercle dont les coordonnées du centre sont passées en paramètre rayon=40 up() goto(x,y) down() pensize(8) color('black','white') begin_fill() circle(rayon) end_fill() up() goto(x-rayon//4,y+rayon//2) write(nom,font=('Arial', 24, 'bold')) down() def dessiner_arete(x1,y1,x2,y2): # trace un trait entre 2 points dont les coordonnées sont passées en paramètre up() goto(x1,y1+40) down() pensize(8) goto(x2,y2+40) # ==================== # Programme principal # ==================== # Description du graphe dans une matrice d'adjacence : # il s'agit ici d'un dictionnaire de liste, où les clés portent le nom des sommets matrice_adj={} # graphe connexe à 2 sommets (une seule arête) : matrice_adj['A']=['B'] matrice_adj['B']=['A'] """ # graphe non connexe à 2 sommets (2 sommets isolés) : matrice_adj['A']=[] matrice_adj['B']=[] # graphe non complet à 3 sommets : matrice_adj['A']=['C'] matrice_adj['B']=['C'] matrice_adj['C']=['A','B'] # graphe complet à 3 sommets : matrice_adj['A']=['B','C'] matrice_adj['B']=['A','C'] matrice_adj['C']=['A','B'] """ nbr_sommets=len(matrice_adj) liste_sommets=list(matrice_adj) liste_sommets.sort() speed(0) hideturtle() afficher_message("Ce programme dessine un graphe avec le module Turtle") # chaque ordre de graphe (nombre de sommets) est un cas particulier : if nbr_sommets==2: # coordonnées des sommets (une liste de dictionnaires) : coord=[{'x':-200,'y':100},{'x':200,'y':-100}] # dessine les arêtes selon la matrice d'adjacence : if liste_sommets[1] in matrice_adj[liste_sommets[0]]: # sommet 0 adjacent au sommet 1 ? dessiner_arete(coord[0]['x'],coord[0]['y'],coord[1]['x'],coord[1]['y']) # dessine les 2 sommets dans tous les cas : dessiner_sommet(coord[0]['x'],coord[0]['y'],liste_sommets[0]) dessiner_sommet(coord[1]['x'],coord[1]['y'],liste_sommets[1]) elif nbr_sommets==3: # dessine les arêtes selon la matrice d'adjacence : if liste_sommets[1] in matrice_adj[liste_sommets[0]]: # sommet 0 adjacent au sommet 1 ? dessiner_arete(-200,200,200,200) if liste_sommets[2] in matrice_adj[liste_sommets[1]]: # sommet 1 adjacent au sommet 2 ? dessiner_arete(-200,200,0,-200) if liste_sommets[0] in matrice_adj[liste_sommets[2]]: # sommet 2 adjacent au sommet 0 ? dessiner_arete(200,200,0,-200) # dessine les 3 sommets dans tous les cas : dessiner_sommet(-200,200,liste_sommets[0]) dessiner_sommet(200,200,liste_sommets[1]) dessiner_sommet(0,-200,liste_sommets[2]) elif nbr_sommets==4: pass # coordonnées des sommets (une liste de dictionnaires) : """ programme à compléter """ # dessine les arêtes selon la matrice d'adjacence : """ programme à compléter """ # dessine les 4 sommets dans tous les cas : """ programme à compléter """ else: print("Le programme ne gère pas encore un graphe à %d sommets" % nbr_sommets) done() # ========================== # Fin du programme principal # ==========================