Table des matières
Grammaire
Paramètres
Algorithme
Exemple
输出
结论
Maison développement back-end C++ Trouvez le chemin le plus court entre deux nœuds à l'aide de l'algorithme Floyd-Warshal

Trouvez le chemin le plus court entre deux nœuds à l'aide de l'algorithme Floyd-Warshal

Sep 20, 2023 pm 02:21 PM
节点 chemin le plus court Algorithme de Freud-Warshal

C++ a une macro, qui est définie comme un morceau de code ou une valeur attendue, et elle sera réutilisée chaque fois que l'utilisateur en aura besoin. L'algorithme de Floyd-Walshall est le processus permettant de trouver le chemin le plus court entre toutes les paires de sommets dans un graphe pondéré donné. L'algorithme suit une approche de programmation dynamique pour trouver le graphique de poids minimum.

Comprenons la signification de l'algorithme de Freud-Walshire à travers des diagrammes -

Trouvez le chemin le plus court entre deux nœuds à laide de lalgorithme Floyd-Warshal

Avec le sommet 1 comme source et le sommet 4 comme destination, trouvez le chemin le plus court entre eux.

Nous avons vu qu'il existe deux chemins qui peuvent être connectés au sommet cible 4.

  • 1 -> 4 – Le bord a un poids de 5

  • 1 -> 8 -> 3 -> 4 – Le poids du bord (1+2+1) est de 4.

Dans le graphique I donné, nous voyons l'arête minimale reliant deux sommets. Voici donc le chemin du sommet 8 au sommet 3 reliant le sommet 1 au sommet 4 et l'arête est 4. D’un autre côté, il existe une arête dirigée du sommet 1 au sommet 4, et le poids de l’arête est 5.

Maintenant, nous comparons deux poids, à savoir 4 et 5. Par conséquent, voici 4 est le poids minimum du graphique calculé selon l'algorithme de Floyd Warshall.

Dans cet article, nous utiliserons l'algorithme de Floyd Warshall pour trouver le chemin le plus court entre deux nœuds donnés.

Grammaire

La syntaxe suivante est utilisée dans le programme -

data_type[][] array_name;
Copier après la connexion

Paramètres

data_type[][] - Le type de données mentionné par l'utilisateur. Le premier tableau représente les lignes et le deuxième tableau représente les colonnes. Cela représente donc un tableau à deux dimensions.

array_name - Le nom donné au tableau.

Algorithme

  • Nous allons démarrer le programme avec le fichier d'en-tête 'iostream' et définir l'emplacement de la macro comme 'INF' (infini) car plus tard, il satisfera la matrice de tableau 2D et l'instruction if-else.

  • Ensuite, nous créons une définition de fonction globale appelée 'printPath' et acceptons trois paramètres, 'parent[]', 'i' et 'j' pour vérifier que le chemin existe.

  • Ensuite, nous démarrons la fonction principale et stockons la valeur ‘4’ dans la variable ‘V’, qui représente le nombre de sommets. Deuxièmement, stockez la valeur sous la forme d’une matrice de contiguïté dans la variable ‘dist[V][V]’. Comme nous le savons, dist[i][j] représente une matrice 2D, qui définit le poids de l'arête de 'i' à 'j', en stockant la matrice de contiguïté.

  • Ensuite, nous initialisons un tableau 2D pour la variable ‘parent’, de taille [V][V].

  • Dans cette variable, nous utilisons pour afficher chaque paire de sommets 'i' et 'j' par rapport à 'parent[i][j]'< /b>.

  • En utilisant deux boucles for imbriquées, nous trouverons le chemin le plus court. La première boucle for parcourt les lignes de la matrice. Ensuite, parcourez les colonnes de la matrice à travers la deuxième boucle for, puis nous vérifierons la condition suivante en utilisant l'instruction if-else -

    • Si (dist[i][j] != INF && i != j) { La traduction chinoise de parent[i][j] = i;}

      est : parent[i][j] = i;}

      Dans l'instruction if, nous utilisons l'opérateur 'and' (&&) pour exprimer deux conditions si les deux conditions sont remplies, alors 'i' sera stocké dans 'parent[i][j]' , vérifiant ainsi que. le chemin existe.

    • Autres{ La traduction chinoise de parent[i][j] = -1;}

      est : parent[i][j] = -1;}

      Dans l'instruction else, nous initialisons "-1" à "parent[i][j]" pour vérifier que le chemin n'existe pas.

  • Maintenant, nous commençons avec trois boucles for imbriquées et appliquons k sommets compris entre 0 et V-1, avec l'aide de cette plage, notre distance et notre chemin les plus courts seront mis à jour. Dans la troisième boucle imbriquée, nous utilisons la condition suivante comme

if (dist[i][j] < dist[i][k] + dist[k][j]){
   dist[i][j] = dist[i][k] + dist[k][j]; 
   parent[i][j] = parent[k][j];	
}
Copier après la connexion

    Ici, K met à jour les parties de ligne et de colonne de la matrice de tableau 2D, qui vérifie le chemin et la distance les plus courts récemment mis à jour.

  • Ensuite, nous imprimons la distance et le chemin les plus courts de toutes les paires de sommets en donnant les conditions suivantes

    • En utilisant deux boucles for imbriquées, nous imprimons la distance et le chemin les plus courts.

    • En utilisant l'instruction if sous la deuxième boucle for, nous vérifierons si dist[i][j] est égal à l'infini. S'il s'avère être l'infini, imprimez "INF", sinon imprimez le chemin le plus court.

  • Enfin, nous appelons la fonction appelée 'printPath()' en passant trois paramètres (parent[i], i et j.

Exemple

Dans ce programme, nous utiliserons l'algorithme Floyd Warshall pour calculer le chemin le plus court entre deux nœuds quelconques.

#include <iostream> 
using namespace std; 
#define INF 1000000000 // Infinity

void printPath(int parent[], int i, int j) {
   if (i == j) 
      cout << i << " "; 
   else if (parent[j] == -1) 
     cout << "No path exists"; 
   else
   { 
      printPath(parent, i, parent[j]); 
      cout << j << " "; 
   }
} 

int main() 
{
   int V = 4; 
   // V represent number of vertices
   int dist[V][V] = {{0, 2, INF, 4}, 
      {6, 0, 5, 3}, 
      {INF, 10, 0, 1}, 
      {7, 9, 8, 0}}; 
   // Represent the graph using adjacency matrix

   // Apply the Floyd Warshall algorithm to find the shortest paths
   int parent[V][V];
   for (int i = 0; i < V; i++) 
   { 
      for (int j = 0; j < V; j++) 
      {
         if (dist[i][j] != INF && i != j)
         parent[i][j] = i;
         else
         parent[i][j] = -1;
      }
   }
   // update the path and distance using the k vertex range from 0 to V-1.
   for (int k = 0; k < V; k++) 
   { 
      for (int i = 0; i < V; i++) 
      { 
         for (int j = 0; j < V; j++) 
         { 
            if (dist[i][j] > dist[i][k] + dist[k][j]) 
            {
               dist[i][j] = dist[i][k] + dist[k][j];
               parent[i][j] = parent[k][j];	
            }
         }
      }
   }

   // Print shortest distances and paths between all pairs of vertices
   for (int i = 0; i < V; i++) 
   { 
      for (int j = 0; j < V; j++) 
      { 
         cout << "The Shortest distance between " << i << " and " << j << " is ";
         if (dist[i][j] == INF) 
            cout << "INF "; 
         else
            cout << dist[i][j] << " ";

         cout << "and the shortest path is:- ";
         printPath(parent[i], i, j);
         cout << endl;
      } 
   } 

   return 0; 
}
Copier après la connexion

输出

The Shortest distance between 0 and 0 is 0 and the shortest path is:- 0 
The Shortest distance between 0 and 1 is 2 and the shortest path is:- 0 1 
The Shortest distance between 0 and 2 is 7 and the shortest path is:- 0 1 2 
The Shortest distance between 0 and 3 is 4 and the shortest path is:- 0 3 
The Shortest distance between 1 and 0 is 6 and the shortest path is:- 1 0 
The Shortest distance between 1 and 1 is 0 and the shortest path is:- 1 
The Shortest distance between 1 and 2 is 5 and the shortest path is:- 1 2 
The Shortest distance between 1 and 3 is 3 and the shortest path is:- 1 3 
The Shortest distance between 2 and 0 is 8 and the shortest path is:- 2 3 0 
The Shortest distance between 2 and 1 is 10 and the shortest path is:- 2 1 
The Shortest distance between 2 and 2 is 0 and the shortest path is:- 2 
The Shortest distance between 2 and 3 is 1 and the shortest path is:- 2 3 
The Shortest distance between 3 and 0 is 7 and the shortest path is:- 3 0 
The Shortest distance between 3 and 1 is 9 and the shortest path is:- 3 1 
The Shortest distance between 3 and 2 is 8 and the shortest path is:- 3 2 
The Shortest distance between 3 and 3 is 0 and the shortest path is:- 3 
Copier après la connexion

结论

我们学习了使用Floyd Warshall算法找到任意两个节点之间的最短路径的概念。我们使用邻接矩阵作为程序的输入,通过它我们找到了最短路径和距离。此外,为了更新路径和距离,我们使用了k个顶点来更新行和列。在我们的日常生活中,我们在谷歌地图上搜索最短路线或路径,从一个起点到目的地。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La somme de toutes les paires de chemins les plus courts dans l'arbre La somme de toutes les paires de chemins les plus courts dans l'arbre Aug 28, 2023 pm 03:17 PM

Dans les arbres, le terme « somme des chemins les plus courts de toutes les paires de nœuds » fait référence au calcul de la somme des chemins les plus courts individuels de toutes les paires de nœuds. Une méthode efficace consiste à utiliser l’algorithme double DFS (profondeur d’abord recherche). La distance entre le nœud sélectionné et tous les autres nœuds est déterminée lors du premier passage DFS. L'arbre est parcouru à nouveau lors de la deuxième passe DFS, en considérant chaque nœud comme un LCA potentiel (ancêtre commun le plus bas) et en calculant la somme des distances entre les paires de nœuds descendants du LCA sélectionné. En utilisant cette méthode, vous pouvez calculer la somme des chemins les plus courts pour toutes les paires de nœuds de l'arborescence et garantir une solution idéale. Méthodes utilisées Méthode Dual DFS (Depth First Search) Méthode de programmation dynamique Méthode Dual DFS (Depth First Search) pour l'arborescence. Toutes les paires de chemins les plus courts

Interrogez le poids minimum dans le sous-arbre à partir du nœud X et la distance au plus D Interrogez le poids minimum dans le sous-arbre à partir du nœud X et la distance au plus D Aug 25, 2023 am 11:25 AM

Lors de la programmation informatique, il est parfois nécessaire de trouver le poids minimum d'un sous-arbre provenant d'un nœud spécifique, à condition que le sous-arbre ne puisse pas contenir de nœuds éloignés de plus de D unités du nœud spécifié. Ce problème se pose dans divers domaines et applications, notamment la théorie des graphes, les algorithmes arborescents et l'optimisation des réseaux. Un sous-arbre est un sous-ensemble d'une structure arborescente plus grande, le nœud spécifié servant de nœud racine du sous-arbre. Un sous-arbre contient tous les descendants du nœud racine et leurs arêtes de connexion. Le poids d'un nœud fait référence à une valeur spécifique attribuée à ce nœud, qui peut représenter son importance, sa signification ou d'autres mesures pertinentes. Dans ce problème, l’objectif est de trouver le poids minimum parmi tous les nœuds d’un sous-arbre tout en limitant le sous-arbre aux nœuds situés au plus à D unités du nœud racine. Dans l'article suivant, nous approfondirons la complexité de l'extraction des poids minimum des sous-arbres.

Comment implémenter les fonctions de copie et de coupure de nœuds des cartes mentales via Vue et jsmind ? Comment implémenter les fonctions de copie et de coupure de nœuds des cartes mentales via Vue et jsmind ? Aug 15, 2023 pm 05:57 PM

Comment implémenter les fonctions de copie et de coupure de nœuds des cartes mentales via Vue et jsmind ? La carte mentale est un outil de réflexion courant qui peut nous aider à organiser nos pensées et à trier notre logique de pensée. Les fonctions de copie et de coupe de nœuds sont des opérations couramment utilisées dans les cartes mentales, qui nous permettent de réutiliser plus facilement les nœuds existants et d'améliorer l'efficacité de l'organisation de la réflexion. Dans cet article, nous utiliserons les deux outils Vue et jsmind pour implémenter les fonctions de copie et de coupe de nœuds de la carte mentale. Tout d'abord, nous devons installer Vue et jsmind et créer

Comment implémenter l'algorithme du chemin le plus court en utilisant Java Comment implémenter l'algorithme du chemin le plus court en utilisant Java Sep 19, 2023 am 08:18 AM

Présentation de l'utilisation de Java pour implémenter l'algorithme du chemin le plus court : L'algorithme du chemin le plus court est une application importante dans la théorie des graphes et est largement utilisé dans le routage réseau, la navigation cartographique et d'autres domaines. Dans cet article, nous apprendrons comment implémenter l'algorithme du chemin le plus court à l'aide de Java et fournirons des exemples de code concrets. Idée d'algorithme : Il existe de nombreuses façons d'implémenter l'algorithme du chemin le plus court, parmi lesquels les deux algorithmes les plus connus sont l'algorithme de Dijkstra et l'algorithme A*. Nous nous concentrerons ici sur l'implémentation de l'algorithme de Dijkstra. La base de l'algorithme de Dijkstra

Quelle est la méthode pour supprimer un nœud dans js Quelle est la méthode pour supprimer un nœud dans js Sep 01, 2023 pm 05:00 PM

Les méthodes de suppression de nœuds dans js sont : 1. La méthode removeChild() est utilisée pour supprimer le nœud enfant spécifié du nœud parent. Elle nécessite deux paramètres. Le premier paramètre est le nœud enfant à supprimer et le deuxième paramètre est. le nœud parent. 2. La méthode parentNode.removeChild() peut être appelée directement via le nœud parent pour supprimer le nœud enfant ; 3. La méthode remove() peut supprimer directement le nœud sans spécifier le nœud parent ; L'attribut innerHTML est utilisé pour supprimer le contenu du nœud.

Trouvez le chemin le plus court entre deux nœuds à l'aide de l'algorithme Floyd-Warshal Trouvez le chemin le plus court entre deux nœuds à l'aide de l'algorithme Floyd-Warshal Sep 20, 2023 pm 02:21 PM

C++ a une macro, qui est définie comme un morceau de code ou une valeur attendue, et elle sera réutilisée chaque fois que l'utilisateur en aura besoin. L'algorithme de Floyd-Walshall est le processus permettant de trouver le chemin le plus court entre toutes les paires de sommets dans un graphe pondéré donné. L'algorithme suit une approche de programmation dynamique pour trouver le graphique de poids minimum. Comprenons la signification de l'algorithme de Floyd-Walshall à travers un diagramme - prenons le sommet 1 comme source et le sommet 4 comme destination et trouvons le chemin le plus court entre eux. Nous avons vu qu'il existe deux chemins qui peuvent être connectés au sommet cible 4. 1->4 – l'arête a un poids de 51->8->3->4 – le poids de l'arête (1+2+1) est 4. Dans le graphique I donné, nous voyons la plus petite arête reliant deux sommets. Voici donc le sommet

Vérifie si le chemin entre deux nœuds dans le graphique donné représente le chemin le plus court Vérifie si le chemin entre deux nœuds dans le graphique donné représente le chemin le plus court Sep 07, 2023 pm 06:57 PM

Pour vérifier si un chemin donné entre deux centres d'un graphique est conforme au chemin le plus court, cela peut être calculé en comparant le poids total du bord le long du chemin donné à la distance la plus courte entre des combinaisons des mêmes centres en utilisant un chemin le plus court fiable, tel que Calcul de Dijkstra ou calcul de Floyd-Warshall. Si tous les poids des bords sur un chemin donné correspondent à la suppression la plus limitée, alors cela représente le chemin le plus simple. Également : si le poids global du bord est plus important que la distance la plus courte, cela indique qu'il existe une courte distance entre les deux centres dans le graphique. Méthodes utilisées Algorithme de Dijkstra Algorithme Floyd−Warshall avec coût d'inversion marginal Algorithme gourmand Le calcul de Dijkstra peut être un calcul de parcours de graphe populaire

Comment créer, supprimer, ajouter et remplacer des nœuds d'éléments dans js (avec des exemples de code) Comment créer, supprimer, ajouter et remplacer des nœuds d'éléments dans js (avec des exemples de code) Aug 06, 2022 pm 05:26 PM

Cet article présente principalement comment créer, supprimer, ajouter et remplacer des nœuds d'éléments dans js. J'espère qu'il sera utile aux amis dans le besoin !

See all articles