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 :

parcours d'un grapphe en largeur


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 112
    Par défaut parcours d'un grapphe en largeur
    bonjour a tous,
    voila je cherche l'implementationen pascal de l'algorithme de parcours d'un graphe en largeur,ceci dis l'algorithme j'ai pu l'avoir,mais c'est juste que je suis tombée sur des algorithmes qui utilisent une file ,et dans ma structure de données je veux juste un tableau qui contient les somets de mon graphe est une liste qui contient les successeurs de chaque sommet
    merci

  2. #2
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    et qu'est-ce qui te pose problème pour adapter ton algo??

  3. #3
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 112
    Par défaut
    la structure de données je suis pas certaine que c'est la bonne

  4. #4
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Par défaut Parcours en largeur d'un graphe
    Bonjour,
    j'ai farfouillé dans mes archives datant de 2003, j'ai trouvé ça :
    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
    35
    36
    37
    38
    39
    40
    41
    42
     
    procedure recherche_chemin;
    var p,q:integer;
    begin
    if n=0 then writeln('Le graphe est vide...')
    else
    begin
    write('entrer l''extrémité initiale du chemin:');readln(s1);
    write('entrer l''extrémité finale du chemin:');readln(s2);
    if est_present(s1) and est_present(s2) then
    begin
    if chemin_existe(s1,s2) then
    begin
        p:=1;
        c1:=s2;
        chm[p]:=c1;
        while (c1<>s1) do
        begin
            p:=p+1;
            c1:=sommets[pred(c1)^.val];
            chm[p]:=c1;
        end;
        writeln('*****Voici le chemin recherch‚*****');
        for q:=p downto 1 do
        begin
            if q=1 then
            write(chm[q])
            else
            write(chm[q],'ÄÄ>');
        end;
    end;
    end;
    if (not(est_present(s1)) or not(est_present(s2)))or(not(chemin_existe(s1,s2))) then
    write('il n''‚xiste pas un chemin entre ',s1,' et ',s2);
    end;
    if n=0 then
    begin
    writeln;
    write('appuyez sur une touche pour continuer...');
    readkey;
    end;
    end;
    Je sais que le code n'est pas indenté, peu clair, contient des anomalies, peut-être que ça marche pas, j'ai bien dit qu'il s'agissait d'un vieux programme, j'espère qu'il vous aidera.
    Bon cour@ge.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 112
    Par défaut
    ben merci bien pour votre qui est un peu trop ambigue ^^ mais j'ai pu faire un petit code avec l'aide d'un collégue
    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
    35
     
    const nbsommet:=10;
     
    type tableau:array[1..nbsommet] of boolean;
     
    type ptr:^liste;
           liste=record
           val:integer;
           suiv:ptr;
           end;
     
    type graphe:array[1..nbsommet]of ptr;
     
     
     procedure par(g:graphe);
     var p:ptr;i:integer;marquer:tableau;
     begin
        i:=0;for i:=0 to nbsommet do
          begin
          g[i]:=false;
          end;
        for i:=0 to nbsommet do
           begin
           if marquer[g[i]]:=false then {le sommet n'est pas marqué}
           write('g[i]');
           marquer[g[i]):=true;
           p:=g[i];      {parcourir la liste des successeurs}
           while (p<>nil) do
               begin
                   if marque(g[i]^.val):=false then
                   write('g[i]^.suiv');
                  marquer[g[i ]^.suiv]:=true;
              end;
           end;
    end;

  6. #6
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Par défaut
    Bonjour,
    y a pas de quoi, voici un bonus :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
              (**************************************)
    function chemin_existe(s1,s2:unsommet):boolean;
    var aux,aux1:ref;var i:integer;
    begin
            X1:=[s1];X2:=[s1];
            while (X1<>[]) and (not(accessible(s2))) do
            begin
                i:=1;
                while not(sommets[i] in X1) and (i<=n) do i:=i+1;
                c1:=sommets[i];
                X1:=X1-[c1];
                x:=index(c1);
                aux:=p[x];
                while (aux<>nil) do
                begin
                    c2:=sommets[aux^.val];
                    if not(accessible(c2)) then
                    begin
                        X1:=X1+[c2];
                        X2:=X2+[c2];
                        y:=aux^.val;
                        aux1:=prd[y];
                        while(aux1^.val<>x) and (aux1<>nil) do aux1:=aux1^.suiv;
                        if aux1^.val=x then prds[y]:=aux1;
                    end;
                    aux:=aux^.suiv;
               end;
            end;
    if accessible(s2) then
     chemin_existe:=true
    else chemin_existe:=false;
    end;
              (**************************************)
    procedure recherche_chemin;
    var p,q:integer;
    begin
    textcolor(7);
    if n=0 then writeln('Le graphe est vide...')
    else
    begin
    write('entrer l''‚xtr‚mit‚ initiale du chemin:');readln(s1);
    write('entrer l''‚xtr‚mit‚ finale du chemin:');readln(s2);
    if est_present(s1) and est_present(s2) then
    begin
    if chemin_existe(s1,s2) then
    begin
        p:=1;
        c1:=s2;
        chm[p]:=c1;
        while (c1<>s1) do
        begin
            p:=p+1;
            c1:=sommets[pred(c1)^.val];
            chm[p]:=c1;
        end;
        writeln('*****Voici le chemin recherch‚*****');
        for q:=p downto 1 do
        begin
            if q=1 then
            write(chm[q])
            else
            write(chm[q],'ÄÄ>');
        end;
    end;
    end;
    if (not(est_present(s1)) or not(est_present(s2)))or(not(chemin_existe(s1,s2))) then
    write('il n''‚xiste pas un chemin entre ',s1,' et ',s2);
    end;
    if n=0 then
    begin
    writeln;
    textcolor(29);
    write('appuyez sur une touche pour continuer...');
    readkey;
    end;
    end;
             (**************************************)
    Bon cour@ge.

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

Discussions similaires

  1. Parcours en largeur d'un graphe
    Par line86 dans le forum C
    Réponses: 10
    Dernier message: 30/10/2007, 13h38
  2. Graphe - Parcours en largeur
    Par lusiole dans le forum C
    Réponses: 14
    Dernier message: 29/08/2007, 14h44
  3. [Parcours Largeur d'abord][Calcul ensemble des partis] Je ne m'en sors pas
    Par bitou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/05/2007, 03h41
  4. Parcours en largeur d'une arborescence->Vector
    Par Paniez dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 07/12/2006, 22h21
  5. Réponses: 4
    Dernier message: 19/02/2006, 18h43

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