begin process at 2012 02 05 00:18:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Math & Algorithmes

 > PYTINERIS!

PYTINERIS!


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :6 039 / 449

Auteur : colpompidou

Ecrire un message privé
Commentaire sur cette source (8)
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

Les Membres Club peuvent 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.

 Sources de la même categorie

Source avec Zip BASE64 ENCRYPT/DECRYPT PYTHON BY MAXOU56800 par Maxou56800
Source avec Zip Source avec une capture TRIANGULATION par mecrosoft
Source avec Zip Source avec une capture COURBE DE BEZIER par mecrosoft
Source avec Zip Source avec une capture CALCUL D'AIRE D'UN TRIANGLE [INTERFACE GRAPHIQUE] par SeventhSon
Source avec Zip Source avec une capture SUITE DE FIBONACCI [INTERFACE GRAPHIQUE] par SeventhSon

 Sources en rapport avec celle ci

Source avec Zip PALINDROMES, ANACYCLIQUES ET ANAGRAMMES par lespinx
TROUVER TOUT LES QUADRILATÉRES POSSIBLES AVEC N POINTS ALEAT... par Buenol
Source avec Zip Source avec une capture DIVISIONS AVEC PRÉCISION RÉGLABLE par Clempython
Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI MULTITHREAD par amaury74
Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI par amaury74

Commentaires et avis

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

Commentaire de aera group le 02/05/2007 12:09:43

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

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 ;)

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à !

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.

Commentaire de saigneurdushi le 01/11/2010 01:16:34

Est il possible de mettre un poids différent sur les portions de chemin entre deux villes ?
Gérez par exemple une distance différente entre un aller et le retour suivant les modification des poids qui ont été opperer lors du voyage ?
En tout cas merci :-)

Commentaire de aera group le 01/11/2010 10:17:06

Je gros problème de cette source est sont interface graphique qui je pense limite les possibilité.
Je ne sais pas si cette source est toujours en développement (ca pourrais être un beau projet pour PythonFrance), mais je ne saurais trop conseiller à l'auteur d'oublier vite fait Tk et de passer à quelques chose de plus professionnel du genre WxPython ou Qt ...

Je ne sais pas si cela existe un fichier contenant toutes les routes de France ainsi que les villes. Voila qui pourrait être intéressant il suffirez de le lire et de l'enregistrer sous notre format (conversion des coordonnée - sans doute au forma GPS - mise en forme des infos etc ...)

Ensuite c'est juste de l'interface ...

Commentaire de colpompidou le 01/11/2010 15:08:00

Je ne travaillerai plus sur cette source. Toutefois, je serais heureux de répondre aux questions de ceux qui souhaitent l'améliorer, notamment en ce qui concerne l'interface graphique (restée assez rudimentaire).

 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 Algorithme Python parité [HELP] [ par Lyd3n ] Bonjour, j'ai besoin d'aide pour un programme que je dois rendre a un professeur qui m'a poser des contraintes : je ne dois utiliser que "[i]input[/i Morpion 3D [ par lola413 ] Bonjour, Dans le cadre de mon cours de programmation j'ai pour exercice (a rendre pour le 23, youpi!) de réaliser un morpion 4*4 en 3D (alignement de


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales