Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PYTINERIS!


Information sur la source

Catégorie :Math & Algorithmes Classé sous : algorithme, dijkstra, voyageur, commerce, itinéraire Niveau : Initié Date de création : 11/04/2007 Date de mise à jour : 09/04/2008 17:20:54 Vu / téléchargé: 3 783 / 336

Note :
9,4 / 10 - par 5 personnes
9,40 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Trouver son plus court chemin avec une interface graphique implémentant l'algorithme de Dijkstra.
Utilisation :
Pour chercher le plus court chemin entre deux villes, les sélectionner en cliquant.
Pour ajouter une ville, double-cliquer (clic gauche) dans un espace vide.
Pour supprimer une ville, double-cliquer (clic droit) sur celle-ci.
 

Conclusion

Le code n'est que très peu commenté. Mais les notations sont, à mon avis, suffisantes pour la compréhension.
Tout est entièrement personnalisable grâce au fichier .map. Vous pouvez ainsi créer vos propres cartes.
Le projet est loin d'être achevé. Je prévois d'ajouter la possibilité de changer de carte et je vais peut-être me pencher sur une autre interface graphique... J'attends vos suggestions.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

11 avril 2007 16:05:05 :
Ajout d'informations complémentaires.
11 avril 2007 16:07:01 :
Ajout de la capture d'écran.
11 avril 2007 16:35:45 :
Explication de l'utilisation.
01 juillet 2007 11:52:04 :
Ajout d'un point virgule à la fin de chaque ligne du fichier france.map pour simplifier sa lecture et la rendre plus rapide.
01 juillet 2007 11:57:00 :
Correction d'un léger bogue.
06 avril 2008 19:23:57 :
Correction d'un bogue dans l'ajout d'une ville.
06 avril 2008 21:53:08 :
Possibilité d'ouvrir plusieurs cartes en même temps. Améliorations dans l'ajout d'une route.
08 avril 2008 20:43:52 :
Possibilité de créer une carte.
09 avril 2008 17:20:54 :
Améliorations dans la création d'une nouvelle carte.

Commentaires et avis

signaler à un administrateur
Commentaire de VladislavIV le 16/04/2007 11:32:03

Je n'ai pas pu tester le code (pas installé PIL), mais je te propose ceci pour la méthode pluscourtchemin, de la classe Itineraire (modifications signalées par #<----):

def pluscourtchemin(self, G, start, end):
    def flatten(L):       # Flatten linked list of form [0,[1,[2,[]]]]
        while len(L) > 0:
        yield L[0]
        L = L[1]
    q = [(0, start, ())]  # Heap of (cost, path_head, path_rest).
    visited = set()       # Visited vertices.
    res = False   #<----
    fin = False   #<----
    while not fin:   #<----
        (cost, v1, path) = heappop(q)
        if v1 not in visited:
            visited.add(v1)
            if v1 == end:
                res = list(flatten(path))[::-1] + [v1]   #<----
                fin = True    #<----
            path = (v1, path)
            for (v2, cost2) in G[v1].iteritems():
                if v2 not in visited:
                    heappush(q, (cost + cost2, v2, path))
    return res   #<----


Pour être "propre", une fonction ne doit avoir qu'un seul point de sortie (return), et cela doit être sa dernière instruction. Visualise l'exécution comme un fluide qui sécoule du début à la fin de ta fonction : il n'y a qu'une entrée, il n'y a qu'une sortie. Entre les deux, le traitement. Il faut éviter de mettre des sorties n'importe où au milieu, ou on prend le risque de ne pas contrôler le flux.

De plus, si on fait abstraction de ton "return" au milieu du code, ta boucle "while True:" est une boucle infinie. Il faut absolument éviter ça, ça ne t'apportera que des ennuis !

En espérant être utile ;)
A++

signaler à un administrateur
Commentaire de aera group le 02/05/2007 12:09:43

Pas mal, je note 10. Bon courrage pour la suite

signaler à un administrateur
Commentaire de DoudouBidou le 02/05/2007 18:49:39

pas mal c'est un bon début,
reste plus qu'à implanter les vrais routes et à ajouter une fonction de zoom ;)

signaler à un administrateur
Commentaire de VladislavIV le 02/05/2007 22:26:42

Ouiii... enfin, ne poussons pas le vice trop loin ! :D Mais c'est vrai qu'en donnant comme valeur à chaque arc, les Km de routes qui séparent les deux villes, on peut trouver le parcours minimal en Km pour aller d'une ville donnée à une autre.
Ca ne devrait pas être trop dur à faire, vu ce qu'il y a déjà !

signaler à un administrateur
Commentaire de colpompidou le 23/06/2007 17:07:53

VladislavIV : l'avantage du return, c'est qu'il coupe la boucle while. Ainsi, la boucle for suivant la condition et qui ajoute au tas les villes voisines (liées par une route) n'aura pas à être exécutée inutilement. La fonction est donc plus rapide.
Je vais réfléchir à l'implémentation du zoom. Mais je ne sais pas comment l'intégrer à l'interface graphique ... je suis impatient de voir vos conseils.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Pour ne pas planter [ par franckysnow91 ] Bonjour à tous,Je programme un algorithme sous python et malheureusement, je fais souvent des boucles perverses et je ne réussi pas à m'en sortir. Je


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,749 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.