Position actuelle: Accueil> Derniers articles> Comment implémenter l'algorithme Floyd-Warshall avec PHP pour résoudre le problème de chemin le plus court du graphique

Comment implémenter l'algorithme Floyd-Warshall avec PHP pour résoudre le problème de chemin le plus court du graphique

M66 2025-06-21

Conseils de conception de l'algorithme PHP: comment utiliser l'algorithme Floyd-Warshall pour résoudre le problème de chemin le plus court des graphiques

Dans la théorie des graphiques, le problème de chemin le plus court est un problème algorithmique classique impliquant la recherche du chemin le plus court entre deux sommets dans des graphiques dirigés ou non dirigés. L'algorithme Floyd-Warshall est un algorithme de programmation dynamique classique utilisé pour résoudre ce problème. Cet article expliquera en détail comment implémenter l'algorithme Floyd-Warshall à l'aide de PHP.

Introduction à l'algorithme de Floyd-Warshall

L'algorithme Floyd-Warshall est un algorithme qui résout le problème de chemin le plus court en comparant itérativement les longueurs de chemin les plus courtes entre tous les sommets d'un graphique. Il utilise un tableau bidimensionnel pour stocker la longueur de chemin la plus courte entre les sommets et met à jour ce tableau dans chaque itération. Enfin, nous pouvons obtenir le chemin le plus court entre tous les sommets.

Implémentation du code PHP

Tout d'abord, nous devons créer un tableau 2D de n x n, où N représente le nombre de sommets dans le graphique. Chaque élément du tableau représente la distance entre deux sommets, et s'il n'y a pas de bords entre les deux sommets, la distance est réglée sur infinie. Ce qui suit est l'implémentation du code PHP:

fonction flydwarshall ($ graph) {
    $ n = count ($ graph);
    $ Dist = $ graphique;
    
    pour ($ k = 0; $ k <$ n; $ k ++) {
        pour ($ i = 0; $ i <$ n; $ i ++) {
            pour ($ j = 0; $ j <$ n; $ j ++) {
                if ($ dist [$ i] [$ k] + $ dist [$ k] [$ j] <$ dist [$ i] [$ j]) {
                    $ dist [$ i] [$ j] = $ dist [$ i] [$ k] + $ dist [$ k] [$ j];
                }
            }
        }
    }
    retour $ dist;
}

Exemples de graphiques et d'algorithmes

Ensuite, nous définissons un exemple de graphique et testons notre algorithme. Nous utilisons une matrice d'adjacence pour représenter la structure du graphique, stockant la distance entre les sommets dans un tableau bidimensionnel. L'exemple de code est le suivant:

$ graphique = [
    [0, 5, inf, 10],
    [Inf, 0, 3, inf],
    [Inf, inf, 0, 1],
    [Inf, inf, inf, 0]
]]

Dans l'exemple de diagramme ci-dessus, Inf signifie qu'il n'y a pas de bord entre deux sommets, et nous avons réglé sa distance sur une très grande valeur. Maintenant, nous pouvons appeler la fonction Floydwarshall pour calculer le tableau de chemin le plus court.

$ result = floydwarshall ($ graph);

Résultat de sortie

Exécutez le code ci-dessus et nous obtiendrons le résultat suivant:

0 5 8 9 
Inf 0 3 4 
Inf Inf 0 1 
Inf Inf Inf 0

Les résultats ci-dessus montrent la longueur de chemin la plus courte entre tous les sommets de la figure. Où l'inf signifie qu'il n'y a pas de connexion de chemin entre deux sommets.

Résumer

Cet article présente comment implémenter l'algorithme Floyd-Warshall à l'aide de PHP pour résoudre le problème de chemin le plus court des graphiques. En utilisant l'idée de programmation dynamique, nous pouvons trouver la longueur de chemin la plus courte entre tous les sommets du graphique avec une complexité temporelle de O (n ^ 3). En utilisant des techniques de conception d'algorithme rationnellement, nous pouvons appliquer rapidement et efficacement cet algorithme pour résoudre des problèmes pratiques.