Calcul longueur d'une liste à liens multiples

Calcul longueur d'une liste à liens multiples - C - Programmation

Marsh Posté le 20-04-2009 à 19:07:30    

Bonjour !
 
Voila mon problème :
 
voilà la struct :

Code :
  1. typedef struct quad {
  2.                        struct quad *suiv, *multiple;
  3.                         } Tcoup;


 
Ma question : comment faire pour calculer la longueur d'un coup ? (fonction recursive : int longueur_coup(Tcoup cp, int i) )
 
Exemple d'un coup : ---> represente les liens suiv   et | represente les liens multiples
#---->#---->#
|
#---->#
|        |                    => ce coup est de longueur 4 !
#       #---->#
                  |
                  #---->#
 
Merci a tous !


Message édité par pooky13 le 20-04-2009 à 19:16:08
Reply

Marsh Posté le 20-04-2009 à 19:07:30   

Reply

Marsh Posté le 20-04-2009 à 19:23:29    

pour chaque coup, tu ajoute 1 au max de la longueur des coup multiples fils.


Message édité par Joel F le 20-04-2009 à 19:23:34
Reply

Marsh Posté le 20-04-2009 à 19:26:07    

En fait je ne vois pas trés bien les conditions d'arret de cette fonction ..

Reply

Marsh Posté le 20-04-2009 à 19:38:08    

bah pointeur nul

Reply

Marsh Posté le 21-04-2009 à 12:46:51    

Voilà ce que j'ai testé mais cela ne marche pas :
 

Code :
  1. typedef Tcoup *Tliste;
  2. int longueur_coup(Tcoup cp, int i)
  3. {
  4.    Tliste lect=&cp;
  5.     int a=0;
  6.     int max=0;
  7.  
  8.     if(i==0) { lect=lect->multiple; i=i+1;}
  9.     if((lect->suiv==NULL)&&(lect->multiple==NULL)) { return 0; }
  10.     if(lect->multiple==NULL) {   lect=lect->suiv;}
  11.     while(lect!=NULL)
  12.     {
  13.         if(lect->multiple!=NULL)
  14.             a=i+l_coup(*lect->multiple,i+1);
  15.         else
  16.             a=a+i;
  17.         if(a>max) max=a;
  18.         lect=lect->suiv;
  19.     }
  20.     return max;
  21. }



=> Qu'en pensez-vous ??

=> Si vous pouviez m'aider, ...  :)  Merci d'avance!!


Message édité par pooky13 le 21-04-2009 à 12:48:31
Reply

Marsh Posté le 21-04-2009 à 17:40:49    

Sors ton débugger ...
 
et si lect est nul, t'es bien avancé.

Reply

Marsh Posté le 22-04-2009 à 01:12:44    

C'est une question de cours ?
La fonction est bien longeur_coup(TCoup,int) et non longeur_coup(TCoup*,int) ?
Sinon ta fonction proposée n'est pas récursive...
 
 
- La condition d'arret pas de fils. Comme l'a proposé Joel, tu incrémentes à chaque fois qu'un "multiple" n'est pas nul. Une fois que tu atteints la condition multiple==NULL, tu retournes 1. Le noeud retournera la valeur la plus grande de chaque branche. J'en dis pas plus; à toi d'implémenter cet algorithme.
 
- Dans ton programme, tu supposes qu'un cp pour i==0 à toujours un lect->multiple (non nul). Faux

Reply

Marsh Posté le 22-04-2009 à 10:27:55    

              Ok merci pour vos conseils je vais revoir tout ça !

 

              ... Non non ce n'est pas une question de cours ...c'est pour un projet perso

 

                                         Thanks !


Message édité par pooky13 le 22-04-2009 à 10:28:52
Reply

Marsh Posté le 22-04-2009 à 12:10:54    

Je crois que j'ai trouvé ! merci à tous !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed