NSIterminale

Graphes : structures et parcours en NSI

Fiche de révision complète pour maîtriser Graphes : structures et parcours en NSI en NSI — méthode, exemples et pièges à éviter.

Un graphe est défini par ses sommets et arêtes, orienté ou non.
Représenter un graphe par une matrice ou une liste d’adjacence selon sa densité.
Le BFS explore niveau par niveau avec une file, le DFS explore en profondeur avec une pile.
Les parcours BFS/DFS sont O(V + E) en temps et en espace.
Les graphes servent à modéliser des réseaux, des labyrinthes ou des problèmes d’optimisation.

Graphes : Structures et algorithmes de parcours

Définitions clés

Un graphe est une structure composée de sommets (ou nœuds) et d’arêtes (ou arcs) reliant ces sommets. On distingue deux types principaux :

  • Graphe non orienté : les arêtes n’ont pas de direction (ex : réseau social).
  • Graphe orienté : les arcs ont une direction (ex : réseau routier à sens unique).

Un graphe peut être représenté par :

  • Matrice d’adjacence : tableau 2D où mat[i][j] = 1 si une arête existe entre i et j.
  • Liste d’adjacence : liste où chaque sommet pointe vers ses voisins (plus efficace pour les graphes peu denses).

Parcours de graphes

Deux algorithmes fondamentaux permettent de parcourir un graphe :

  1. Parcours en largeur (BFS) :

    • Utilise une file (FIFO).
    • Commence par un sommet, explore tous ses voisins avant de passer au niveau suivant.
    • Exemple : Trouver le plus court chemin dans un labyrinthe.
    from collections import deque
    def bfs(graphe, depart):
        file = deque([depart])
        visites = set([depart])
        while file:
            sommet = file.popleft()
            for voisin in graphe[sommet]:
                if voisin not in visites:
                    visites.add(voisin)
                    file.append(voisin)
    
  2. Parcours en profondeur (DFS) :

    • Utilise une pile (LIFO) ou la récursivité.
    • Explore un chemin jusqu’à son extrémité avant de revenir en arrière.
    • Exemple : Détecter un cycle dans un graphe.
    def dfs(graphe, sommet, visites=None):
        if visites is None:
            visites = set()
        visites.add(sommet)
        for voisin in graphe[sommet]:
            if voisin not in visites:
                dfs(graphe, voisin, visites)
    

Applications

  • Réseaux : Trouver des connexions (ex : internet, réseaux sociaux).
  • Jeux vidéo : IA pour les déplacements (ex : labyrinthe).
  • Optimisation : Algorithmes de plus court chemin (Dijkstra).

Complexité

  • BFS/DFS : O(V + E) où V = nombre de sommets, E = nombre d’arêtes.
  • Matrice d’adjacence : O(V²) en espace.
  • Liste d’adjacence : O(V + E) en espace.

Remarque : Les graphes pondérés (avec des coûts sur les arêtes) nécessitent des algorithmes spécifiques comme Dijkstra ou A*.

Défi IA

Tu penses avoir maîtrisé ce concept ?

Affronte notre IA et valide tes acquis en 3 questions chronométrées. Aucune inscription requise pour commencer.

Programme officiel100% gratuitRésultat immédiat
Lancer le défi — Gratuit

Déjà inscrit ? Connecte-toi

Fiche générée selon le programme officiel Éducation nationaleToutes les fiches →
Graphes : structures et parcours en NSI — Fiche de révision terminale NSI | ProgresSchool