Maison développement back-end Tutoriel Python Comment écrire l'algorithme de Bellman-Ford en Python ?

Comment écrire l'algorithme de Bellman-Ford en Python ?

Sep 22, 2023 am 08:01 AM
python编程 算法实现 Algorithme de Bellman-Ford

Comment écrire lalgorithme de Bellman-Ford en Python ?

Comment écrire l'algorithme de Bellman-Ford en Python ?

L'algorithme Bellman-Ford est un algorithme permettant de résoudre le problème du chemin le plus court à source unique avec des bords de poids négatifs. Cet article explique comment utiliser Python pour écrire l'algorithme Bellman-Ford et fournit des exemples de code spécifiques.

L'idée principale de l'algorithme Bellman-Ford est d'optimiser le chemin par une itération étape par étape jusqu'à ce que le chemin le plus court soit trouvé. Les étapes de l'algorithme sont les suivantes :

  1. Créez un tableau dist[] pour stocker la distance la plus courte entre le point source et les autres sommets.
  2. Initialisez tous les éléments du tableau dist[] à l'infini, mais avec une distance de 0 du point source.
  3. Par n-1 itérations, pour chaque arête (u, v) :
    1) Si dist[v] > poids(u, v).
  4. Vérifiez s'il existe un cycle de poids négatif. Pour chaque arête (u, v) :
    1) Si dist[v] > dist[u] + poids(u, v), il existe un cycle de poids négatif et le chemin le plus court ne peut pas être déterminé.
  5. S'il n'y a pas de cycle de poids négatif, le chemin le plus court a été calculé et le tableau dist[] est le chemin le plus court.

Voici un exemple de code de l'algorithme Bellman-Ford écrit en Python :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

class Graph:

    def __init__(self, vertices):

        self.V = vertices

        self.graph = []

 

    def add_edge(self, u, v, w):

        self.graph.append([u, v, w])

 

    def bellman_ford(self, src):

        dist = [float("Inf")] * self.V

        dist[src] = 0

 

        for _ in range(self.V - 1):

            for u, v, w in self.graph:

                if dist[u] != float("Inf") and dist[u] + w < dist[v]:

                    dist[v] = dist[u] + w

 

        for u, v, w in self.graph:

            if dist[u] != float("Inf") and dist[u] + w < dist[v]:

                print("图中存在负权环,无法确定最短路径")

                return

 

        self.print_solution(dist)

 

    def print_solution(self, dist):

        print("顶点    最短距离")

        for i in range(self.V):

            print(i, "        ", dist[i])

 

# 示例用法

g = Graph(5)

g.add_edge(0, 1, -1)

g.add_edge(0, 2, 4)

g.add_edge(1, 2, 3)

g.add_edge(1, 3, 2)

g.add_edge(1, 4, 2)

g.add_edge(3, 2, 5)

g.add_edge(3, 1, 1)

g.add_edge(4, 3, -3)

g.bellman_ford(0)

Copier après la connexion

Dans l'exemple ci-dessus, un graphe g est créé et des arêtes sont ajoutées. Appelez ensuite la méthode bellman_ford pour calculer le chemin le plus court et imprimer le résultat. Dans cet exemple, le point source est 0 et le chemin le plus court sera calculé.

La complexité temporelle de l'algorithme de Bellman-Ford est O(V*E), où V est le nombre de sommets et E est le nombre d'arêtes. Dans les applications pratiques, s’il y a un cycle de poids négatif dans le graphique, l’algorithme ne s’arrêtera pas mais entrera dans une boucle infinie. Par conséquent, lorsque vous utilisez l’algorithme Bellman-Ford, vous devez d’abord vérifier s’il existe un cycle de poids négatif.

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)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD
Musée à deux points: toutes les expositions et où les trouver
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)

AssertionError : Comment résoudre les erreurs d'assertion Python ? AssertionError : Comment résoudre les erreurs d'assertion Python ? Jun 25, 2023 pm 11:07 PM

Les assertions en Python sont un outil utile permettant aux programmeurs de déboguer leur code. Il est utilisé pour vérifier que l'état interne du programme répond aux attentes et générer une erreur d'assertion (AssertionError) lorsque ces conditions sont fausses. Pendant le processus de développement, des assertions sont utilisées lors des tests et du débogage pour vérifier si l'état du code correspond aux résultats attendus. Cet article abordera les causes, les solutions et comment utiliser correctement les assertions dans votre code. Cause de l'erreur d'assertion Erreur d'assertion réussie

Comment développer un scanner de vulnérabilités en Python Comment développer un scanner de vulnérabilités en Python Jul 01, 2023 am 08:10 AM

Présentation de la façon de développer un scanner de vulnérabilités via Python Dans l'environnement actuel de menaces croissantes pour la sécurité Internet, les scanners de vulnérabilités sont devenus un outil important pour protéger la sécurité du réseau. Python est un langage de programmation populaire, concis, facile à lire et puissant, adapté au développement de divers outils pratiques. Cet article explique comment utiliser Python pour développer un scanner de vulnérabilités afin de fournir une protection en temps réel à votre réseau. Étape 1 : Déterminer les cibles d'analyse Avant de développer un scanner de vulnérabilités, vous devez déterminer les cibles que vous souhaitez analyser. Il peut s'agir de votre propre réseau ou de tout ce que vous êtes autorisé à tester.

Techniques d'échantillonnage stratifié en Python Techniques d'échantillonnage stratifié en Python Jun 10, 2023 pm 10:40 PM

Technique d'échantillonnage stratifié en Python L'échantillonnage est une méthode de collecte de données couramment utilisée en statistiques. Elle peut sélectionner une partie d'échantillons de l'ensemble de données pour analyse afin de déduire les caractéristiques de l'ensemble de données. À l’ère du Big Data, la quantité de données est énorme et l’utilisation d’échantillons complets à des fins d’analyse prend du temps et n’est pas économiquement pratique. Par conséquent, le choix d’une méthode d’échantillonnage appropriée peut améliorer l’efficacité de l’analyse des données. Cet article présente principalement les techniques d'échantillonnage stratifié en Python. Qu’est-ce que l’échantillonnage stratifié ? En échantillonnage, échantillonnage stratifié

Comment utiliser Python pour les scripts et l'exécution sous Linux Comment utiliser Python pour les scripts et l'exécution sous Linux Oct 05, 2023 am 11:45 AM

Comment utiliser Python pour écrire et exécuter des scripts sous Linux Dans le système d'exploitation Linux, nous pouvons utiliser Python pour écrire et exécuter divers scripts. Python est un langage de programmation concis et puissant qui fournit une multitude de bibliothèques et d'outils pour rendre la création de scripts plus facile et plus efficace. Ci-dessous, nous présenterons les étapes de base de l'utilisation de Python pour l'écriture et l'exécution de scripts sous Linux, et fournirons quelques exemples de code spécifiques pour vous aider à mieux le comprendre et l'utiliser. Installer Python

Comment écrire un algorithme de recherche en largeur en utilisant C# Comment écrire un algorithme de recherche en largeur en utilisant C# Sep 19, 2023 am 11:45 AM

Comment utiliser C# pour écrire un algorithme de recherche en largeur d'abord La recherche en largeur d'abord (BFS) est un algorithme de recherche de graphiques couramment utilisé pour parcourir un graphique ou un arbre en fonction de la largeur. Dans cet article, nous explorerons comment écrire un algorithme de recherche en largeur en utilisant C# et fournirons des exemples de code concrets. Principe de l'algorithme Le principe de base de l'algorithme de recherche en largeur est de partir du point de départ de l'algorithme et d'étendre la plage de recherche couche par couche jusqu'à ce que la cible soit trouvée ou que l'intégralité du graphique soit parcourue. Il est généralement implémenté via des files d’attente.

Utilisation de la fonction sqrt() en Python Utilisation de la fonction sqrt() en Python Feb 21, 2024 pm 03:09 PM

Exemples d'utilisation et de code de la fonction sqrt() en Python 1. Fonction et introduction de la fonction sqrt() Dans la programmation Python, la fonction sqrt() est une fonction du module mathématique, et sa fonction est de calculer la racine carrée de un numéro. La racine carrée signifie qu'un nombre multiplié par lui-même est égal au carré du nombre, c'est-à-dire x*x=n, alors x est la racine carrée de n. La fonction sqrt() peut être utilisée dans le programme pour calculer la racine carrée. 2. Comment utiliser la fonction sqrt() en Python, sq

Pratique de programmation Python : comment utiliser l'API Baidu Map pour générer des fonctions de carte statique Pratique de programmation Python : comment utiliser l'API Baidu Map pour générer des fonctions de carte statique Jul 30, 2023 pm 09:05 PM

Pratique de programmation Python : Comment utiliser l'API Baidu Map pour générer des fonctions de carte statique Introduction : Dans la société moderne, les cartes sont devenues un élément indispensable de la vie des gens. Lorsque nous travaillons avec des cartes, nous avons souvent besoin d'obtenir une carte statique d'une zone spécifique à afficher sur une page Web, une application mobile ou un rapport. Cet article explique comment utiliser le langage de programmation Python et l'API Baidu Map pour générer des cartes statiques et fournit des exemples de code pertinents. 1. Travail de préparation Pour réaliser la fonction de génération de cartes statiques à l'aide de l'API Baidu Map, je

Comment faire du traitement et de la reconnaissance d'images en Python Comment faire du traitement et de la reconnaissance d'images en Python Oct 20, 2023 pm 12:10 PM

Comment effectuer le traitement et la reconnaissance d'images en Python Résumé : La technologie moderne a fait du traitement et de la reconnaissance d'images un outil important dans de nombreux domaines. Python est un langage de programmation facile à apprendre et à utiliser doté de riches bibliothèques de traitement et de reconnaissance d'images. Cet article expliquera comment utiliser Python pour le traitement et la reconnaissance d'images, et fournira des exemples de code spécifiques. Traitement d'image : le traitement d'image est le processus consistant à effectuer diverses opérations et transformations sur des images pour améliorer la qualité de l'image, extraire des informations des images, etc. Bibliothèque PIL en Python (Pi

See all articles