IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème implémentation Dijkstra


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Par défaut Problème implémentation Dijkstra
    Bonjour,

    Je me retrouve, en écrivant un code Python, devant un problème pour le dijkstra

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import numpy as np
    oo = np.inf  #Définir l'infini
    sommets = [0,1,2,3,4]
     
    Adj = np.array([[0,8,2,1,oo],
                    [8,0,5,6,1],
                    [2,5,0,oo,3],
                    [1,6,oo,0,oo],
                    [oo,1,3,oo,0] ])
     
    def plusCourt(T,I):
        minimum = oo
        indice = 0
        for i in I:
            if T[i] < minimum and T[i] > 0:
                indice = i
                minimum = T[i]
        return indice
     
     
    def dijkstra(Adj,s0):
        n = len(Adj)
        Dist = oo * np.ones(n)
        Dist[s0] = 0
        NonMarques = [k for k in range(n)]
        Marques = [ ]
        while len(Marques) < n:
            i = plusCourt(Dist,NonMarques)
            Marques.append(i)
            NonMarques.remove(i)
            for k in NonMarques:
                if Dist[i] + Adj[i,k] < Dist[k]:
                    Dist[k] = Dist[i] + Adj[i,k]
        return Dist
    En effet, en testant dijkstra(Adj,0) avec l'exemple, aucun soucis. Mais si je tente 1,2,3,4, je reçois l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <tmp 1> in dijkstra(Adj, s0)
         28         i = plusCourt(Dist,NonMarques)
         29         Marques.append(i)
    ---> 30         NonMarques.remove(i)
         31         for k in NonMarques:
         32             if Dist[i] + Adj[i,k] < Dist[k]:
     
    ValueError: list.remove(x): x not in list
    Comment corriger ça?

    Merci d'avance!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par zo-68 Voir le message
    Comment corriger ça?
    Avec l'instruction "print" vous affichez les valeurs retournées par "plusCourt" pour voir laquelle est retournée 2 fois.
    Puis vous réfléchissez au pourquoi.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Par défaut
    En effet ma fonction plusCourt renvoie toujours l'indice 0 si le s0 choisit dans dijkstra est différent de 0, ce qui fait que c'est le 0 qui revient plusieurs fois.

    Je vais voir si je peux trouver comment je vais avancer, et je reviens à vous si je bloque encore.

    Merci!

    Edit: Plutot qu'un supérieur strict à 0, il fallait un supérieur ou égal.
    Merci, problème réglé!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème implémentation VertexView
    Par xx1790 dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 15/08/2009, 19h18
  2. Problème implémentation convertisseur StringToImageSource
    Par alexbts dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 16/03/2009, 22h45
  3. Problème implémentation algo de Karatsuba
    Par TrexXx dans le forum Débuter
    Réponses: 4
    Dernier message: 14/01/2009, 07h26
  4. [C# 3.0] Problème implémention explicite d'interfaces
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/10/2008, 13h44
  5. Réponses: 14
    Dernier message: 05/04/2007, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo