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

Algorithmes et structures de données Discussion :

Plus court chemin dans un graphe non pondéré (file d’attente)


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut Plus court chemin dans un graphe non pondéré (file d’attente)
    Bonjour,

    je vous contacte car je bloque sur ce code au niveau des enfiler et defiler. Voici la question

    Dans un premier temps, vous utilisez votre code manipulant des listes doublement chaînées comme file d’attente. La terminologie : enfiler correspond à insérer (à vous de choisir la place) et défiler à supprimer de la liste tout en récupérant la valeur de la cellule (le numéro x du sommet).

    Mon code :

    Code C : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include <stdio.h>
     
    // Procédure qui recherche le plus court chemin depuis un sommet de référence 
        // Paramètres : 
        // adjacence : matrice d’adjacence du graphe
        // ordre : nombre de sommets
        // s : numéro de sommet de référence 
        // l : tableau dynamique alloué des longueurs minimales des sommets depuis s
        // pred : tableau dynamique alloué des prédécesseurs des sommets 
     
        void plusCourtChemin (int**adjacence, int ordre, int s, int *l, int *pred) { // Variables locales
            int *marques ;
            int x, y ; 
            t_file *f ;
     
            // Allouer le tableau marques de taille « ordre »
                *p = malloc(sizeof(int) * ordre);
     
            // Initialiser les marquages et les longueurs minimales à 0
            for (x=0 ; x<ordre ; x++) {
                marques[x] = 0 ;
                l[x] = 0 ;
            }
     
            // Marquer le sommet s à 1
                marques[s] = 1 ;
     
            // Créer (allouer) la file f et enfiler s dans f
                ... (pas trouvé)
     
            while () { // Tant que la file f n’est pas vide// Défiler le premier sommet x de la file f (PAS TROUVé)
     
            // Pour tous les sommets y adjacents à x et non marqués 
                for (y=0 ; y<ordre ; y++)
                    if (adjacence[x][y] && !marques[y]) {
                        marques[y] = 1 ; // marquer le sommet y(PAS TROUVE) // enfiler le sommet y dans f 
                        pred[y] = x ; // x est le prédécesseur de y
                        l[y] = l[x]+1 ; // incrémenter la longueur de y
                }
            }
    }

    Et connaitre sa complexité mémoire.

    Je bloque un peu la dessus.

    Je ne sais pas ici si mon malloc a bien été utilisé ?

    Voilà voilà en espérant que vous puissiez m'éclairer

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Citation Envoyé par Kenshin01 Voir le message
    Bonjour,

    je vous contacte car je bloque sur ce code au niveau des enfiler et defiler. [...]
    La meilleure des façons de ne pas bloquer sur ça est de créer une structure de données à part que tu pourras tester et appeler à volonté sans avoir besoin de tout réimplémenter à chaque fois que tu en auras besoin,.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    C'est a dire structure de donnée je n'ai pas très bien compris ?

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Ton morceau devrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Créer (allouer) la file f et enfiler s dans f
    file_t *file=file_creer();
    file = file_enfiler(file, s);
     
    while (! file_est_vide(file) ) { // Tant que la file f n’est pas vide
       sommet = file_defiler(file);
       …
    où c'est à ta charge de créer la structure de donnée file_t qui est une simple file d'entiers, ainsi que toutes les primitives et fonctions d'accès …

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Code C : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <stdio.h>
     
    // Procédure qui recherche le plus court chemin depuis un sommet de référence
    // Paramètres :
    // adjacence : matrice d’adjacence du graphe
    // ordre : nombre de sommets
    // s : numéro de sommet de référence
    // l : tableau dynamique alloué des longueurs minimales des sommets depuis s
    // pred : tableau dynamique alloué des prédécesseurs des sommets
     
    void plusCourtChemin (int**adjacence, int ordre, int s, int *l, int *pred) { // Variables locales
           int *marques ;
           int x, y ;
           t_file *f ;
     
          // Allouer le tableau marques de taille « ordre »
          *p = malloc(sizeof(int) * ordre);
     
          // Initialiser les marquages et les longueurs minimales à 0
          for (x=0 ; x<ordre ; x++) {
          marques[x] = 0 ;
          l[x] = 0 ;
          }
     
         // Marquer le sommet s à 1
         marques[s] = 1 ;
     
         // Créer (allouer) la file f et enfiler s dans f
         t_file *file=file_creer();
         file = file_enfiler(file, s);
     
         while (! file_est_vide(file)) { // Tant que la file f n’est pas vide
                  sommet = file_defiler(file)// Défiler le premier sommet x de la file f
     
         // Pour tous les sommets y adjacents à x et non marqués
          for (y=0 ; y<ordre ; y++)
                  if (adjacence[x][y] && !marques[y]) {
                  marques[y] = 1 ; // marquer le sommet y
                  file_enfiler(file, y) // enfiler le sommet y dans f
                  pred[y] = x ; // x est le prédécesseur de y
                  l[y] = l[x]+1 ; // incrémenter la longueur de y
                 }
          }
    }

    Est ce que cette fois c'est bon au niveau de la structure ? Je pense avoir compléter le code mais je ne sais pas ?

    Merci d'avance

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Commence par écrire ta structure de données file … teste la … seulement ensuite tu pourras l'utiliser dans ton implémentation d'algo.

Discussions similaires

  1. Algorithme des K plus courts chemins dans un graphe dirigé
    Par geforce dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 23/01/2015, 15h07
  2. Calcul de plus court chemin dans un graphe
    Par Elmilouse dans le forum Prolog
    Réponses: 6
    Dernier message: 21/03/2010, 20h26
  3. Plus court chemin dans un graphe avec contraintes
    Par tomjr dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 30/12/2009, 12h36
  4. trouver le plus court chemin dans un graphe
    Par buggen25 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/08/2008, 17h34
  5. N plus courts chemin dans un graphe
    Par MLK jr dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 13/03/2006, 00h32

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