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

Langage Java Discussion :

Dijkstra Java Code


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut Dijkstra Java Code
    Bonjour,

    Je viens d'étudier les graphes et je recherche, actuellement, le code Java de l'algorithme de Dijkstra.
    J'ai déjà recherché sur Internet.
    Toutefois, le code est souvent présenté sous forme de matrice d'adjacence et avec des paramètres différents (un sommet de départ et un d'arrivée). Ce qui est assez déroutant (je ne connais pas encore ce genre de matrice)

    En fait, j'ai besoin d'une méthode qui s'appuie sur les listes d'adjacence et qui n'utilise qu'un seul paramètre : le sommet de départ.
    A partir de là, la méthode renvoie tous les chemins les plus court vers les autres sommets.

    Pouvez vous m'aider ?
    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    as-tu regardé :
    http://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra

    Après la description avec un exemple concret, il y a un pseudo-code (en français) qu'il est facile de ré-écrire en java
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut
    Bonjour,

    Cela fait déjà un petit moment que j'ai regardé le pseudo code sur Wikipédia,
    j'ai toujours du mal quant à l'implantation de mon programme.

    Pouvez vous m'orienter ?

    Ma structure de donnée, imposée au départ, se présente ainsi :
    Une classe graphe, une classe ListAd (qui permet de créer des Listes d'adjacences ), Element (qui est défini par un sommet et une distance).

    Je dois utiliser 2 vecteurs (Vector) qui contiennent des Elements : T et V.
    T représente l'ensemble des noeuds et V le Vecteur solution contenant le chemin le plus court.
    En parcourant l'ensemble de mon circuit, je dois supprimer au fur et à mesure les Elements de D et les rajouter dans le vecteur solutions.

    Où j'en suis :
    1) La phase d'initiation (0 et infini) est faite
    2)...
    3)La partie sur la suppression des éléments de D et l'ajout dans S est faite
    4) L'actualisation des distances est faite

    Je bloque sur l'étape 2 : la recherche du plus petit noeud suivant.


    Voici ce que je pensais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while(ListAd[numero_sommet]!=null){                               
     if (tmp>ListAd[numero_sommet].valeur){
                               tmp=ListAd[numero_sommet].valeur;                                       
                               index_mini=numero_sommet;//ici je repère l'indice pour lequel la distance est la plus faible                                  
    }
             ListAd[numero_sommet]=ListAd[numero_sommet].prochain // Je regarde les prochains noeuds dans la liste d'adjacence pour voir s'il n'y a pas de nouveaux noeuds.
    Après réflexion j'ai peur que ce code soit faux.
    Avec cette instruction,
    ListAd[numero_sommet]=ListAd[numero_sommet].prochain.Est ce que numero_sommet prend la valeur du sommet suivant ?

    2ème problème, imaginons je considère un noeud. Donc par cette méthode, je parcours tous les prochains noeuds pour évaluer la distance. Je l'ai trouvé. D'accord, maintenant, j'opère sur ce nouveau noeud. N'y aura t-il pas un problème ? Car lors de l'évaluation du premier noeud, je l'ai parcouru jusqu'à ListAd[numero_sommet]=null. Donc, maintenant, ListAd[numero_sommet]=null, non ?


    Merci d'avance pour votre aide.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Par défaut
    Salut JohnKr,

    Pour ma part, j'ai utilisé des piles, de cette façon, tu n'auras pas à gérer les indices de tableaux.
    En ce qui concerne l'étape deux, à partir du sommet courant, tu regardes toutes les arrêtes qu'il possède et tu ajoute cette distance à la précedente, s'il n'a pas était marqué, sinon tu empile la dernière valeur de la pile.

    Bon courage!

    Cordialement

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut
    Bonsoir,

    Merci d'avoir répondu.
    J'ai du mal à voir.
    Quand vous parlez de pile, vous voulez dire que je dois passer en récursif ?

    Merci encore

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Par défaut
    Bonsoir,

    Non, l'utilisation de piles n'oblige pas le récursif, ça permet simplement de ne pas avoir à gérer les indices de tableaux.

    Brièvement l'étape deux donne quelque chose dans ce genre, pour chaque sommet relié à une arête du sommet courant, calcule la distance.
    Sommer cette distance à la valeur du sommet courant et l'empiler dans la pile du sommet (pas celle du sommet courant).

    Pour l'initialisation de cette étape, le sommet courant correspond au sommet de départ.

    Le plus simple, c'est de faire un exemple simple sur papier, ensuite le code sera plus claire.

    J'espère avoir était assez claire dans mes explications,

    Cordialement

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut
    Bonjour,

    Merci de votre aide.
    C'est vrai que cela serait pratique si je n'avais pas à gérer les indices.
    En fait, je ne connais l'utilisation de la pile que par rapport à la récursivité.
    Donc quand vous dîtes "'empiler dans la pile ", comment dois je m'y prendre ? Je veux dire il n'y a pas de fonction spécifique pour empiler, non ?

    Merci encore

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Par défaut
    Bonjour,

    Pour utiliser une pile, il existe des méthodes pour empiler et dépiler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                    Stack<Integer> pile = new Stack<Integer>();
    		pile.push(1);
    		pile.push(2);
    		pile.push(3);
     
    		String chaine = "";
     
    		while(!pile.isEmpty()){
    			chaine = pile.pop() + ", "+chaine;
    		}
     
    		System.out.println("pile : " + chaine);
    Cordialement,
    Mathieu_2705

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut
    Bonjour,

    Merci pour cette exemple, je pense que c'est plus clair pour moi maintenant en ce qui concerne la pile.

    Brièvement l'étape deux donne quelque chose dans ce genre, pour chaque sommet relié à une arête du sommet courant, calcule la distance.
    Sommer cette distance à la valeur du sommet courant et l'empiler dans la pile du sommet (pas celle du sommet courant).
    Est ce que cela veut dire que je dois créer une pile spécifique à chaque sommet ?

    Merci encore de votre aide

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Par défaut
    Bonjour,

    Oui, c'est comme ça que je l'ai réalisé. Peut être existe t'il d'autre moyen. Voici l'exemple avec lequel j'ai réalisé l'algorithme, il se trouve dans le dossier Maths du site :

    http://www.partagedecours.hebergratu...hp?dir=partage

    Le refaire à la main pourrai vous aider à comprendre pourquoi une pile, et à trouver un algorithme.

    Cordialement,
    Mathieu_2705

Discussions similaires

  1. problème génération de Java Code from wsdl
    Par hassen07 dans le forum Services Web
    Réponses: 0
    Dernier message: 03/02/2010, 18h02
  2. [jasperReport][java] code source pour ireport 3.5.3
    Par identifia dans le forum Jasper
    Réponses: 5
    Dernier message: 04/01/2010, 10h56
  3. Compiling jsp from java code
    Par lamine2703 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 29/11/2009, 12h10
  4. Réponses: 2
    Dernier message: 28/08/2006, 11h00

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