


Trouvez le chemin le plus court entre deux nœuds à l'aide de l'algorithme Floyd-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 -

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;
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].
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
Dans cette variable, nous utilisons pour afficher chaque paire de sommets 'i' et 'j' par rapport à 'parent[i][j]'< /b>.
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]; }
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.
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.
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; }
输出
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
结论
我们学习了使用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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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 ? 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

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

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.

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

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

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 !
