← CertifHub
Algorithmes 6 juin 2026 · 10 minutes · par L'équipe CertifApp

Implémentation de l'algorithme de Bellman-Ford pour la détection de cycles négatifs dans les graphes

Découvrez comment utiliser l'algorithme de Bellman-Ford pour détecter les cycles négatifs dans les graphes et résoudre les problèmes de chemins les plus courts. Cette méthode est particulièrement utile pour les graphes contenant des arêtes à poids négatif.

Introduction aux algorithmes de Bellman-Ford

L’algorithme de Bellman-Ford est un algorithme de graphes qui trouve les chemins les plus courts entre un nœud source et tous les autres nœuds dans un graphes. Il peut également détecter les cycles négatifs dans les graphes.

Principes de l’algorithme de Bellman-Ford

L’algorithme de Bellman-Ford repose sur la relaxation des arêtes. Il commence par initialiser la distance du nœud source à 0 et la distance de tous les autres nœuds à l’infini. Ensuite, il parcourt toutes les arêtes et met à jour la distance de chaque nœud en fonction du poids de l’arête et de la distance du nœud précédent.

Implémentation de l’algorithme de Bellman-Ford en Python

import sys

class Graph:
    def __init__(self, num_vertices):
        self.num_vertices = num_vertices
        self.graph = {}

    def add_edge(self, u, v, weight):
        if u not in self.graph:
            self.graph[u] = []
        self.graph[u].append((v, weight))

    def bellman_ford(self, source):
        distance = [sys.maxsize] * self.num_vertices
        distance[source] = 0

        for _ in range(self.num_vertices - 1):
            for u in self.graph:
                for v, weight in self.graph[u]:
                    if distance[u] != sys.maxsize and distance[u] + weight < distance[v]:
                        distance[v] = distance[u] + weight

        for u in self.graph:
            for v, weight in self.graph[u]:
                if distance[u] != sys.maxsize and distance[u] + weight < distance[v]:
                    return False

        return distance

# Exemple d'utilisation
graph = Graph(5)
graph.add_edge(0, 1, -1)
graph.add_edge(0, 2, 4)
graph.add_edge(1, 2, 3)
graph.add_edge(1, 3, 2)
graph.add_edge(1, 4, 2)
graph.add_edge(3, 2, 5)
graph.add_edge(3, 1, 1)
graph.add_edge(4, 3, -3)

print(graph.bellman_ford(0))

Avantages et limites de l’algorithme de Bellman-Ford

L’algorithme de Bellman-Ford présente plusieurs avantages, notamment sa capacité à détecter les cycles négatifs et à trouver les chemins les plus courts dans les graphes contenant des arêtes à poids négatif. Cependant, il peut être moins performant que d’autres algorithmes, tels que l’algorithme de Dijkstra, pour les graphes sans arêtes à poids négatif.

Conclusion

En conclusion, l’algorithme de Bellman-Ford est un outil puissant pour la détection de cycles négatifs et la recherche de chemins les plus courts dans les graphes. Il est particulièrement utile pour les graphes contenant des arêtes à poids négatif et peut être implémenté de manière efficace en Python.

Envie d’aller plus loin avec CertifApp ?

Découvrir CertifApp