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.
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.
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; }
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);
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.
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.