Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1076 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Calculer la longueur d'un chemin dans une arborescence

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Calculer la longueur d'un chemin dans une arborescence

n°2233171
zezette
"Allez hop, au revoir"
Posté le 11-07-2014 à 11:31:40  profilanswer
 

Bonsoir à tous,
 
J'ai l'arborescence de mon site qui se trouve dans une table avec 2
colonnes : sources et destination. Ce sont des ID vers une autre table
qui contient les pages proprement dites.
 
Par exemple :
 
Source : destination
1             3
2             3
3             4
1              5
5              6
6              3
 
La page 1 mène à la 3 qui mène à la 4.
La page 2 mène aussi à la 3 qui mène toujours à la 4
La page 1 mène en plus à la 5 qui mène à la 6 qui mène à la 3 qui mène à la 4
 
Je dois faire une fonction qui calcule la longueur d'une branche à partir d'une page donnée
 
Si je veux mesurer à partir de 4, j'ai une longueur de 2 (ou de 4 par le long chemin)
A partir de 3 j'ai une longueur de 1
A partir de 1, longueur de 0
 
Et bref, je bloque sur la fonction :
 

Code :
  1. <?php
  2. function recupniveau($conn, $page, $cpt=0)
  3. {
  4. /* conn = connexion a la bd - page = page a partir de laquelle on compte */
  5. $sql="SELECT source
  6.   FROM NEW_Liens
  7.   WHERE destination=$page;";
  8. if(!$res = $conn->query($sql))
  9.  exit("Impossible d'exécuter la requête $sql" );
  10. if($res->num_rows)
  11. {
  12.  while($restab=$res->fetch_array())
  13.  {
  14.   $cpt++;
  15.   echo $page.' provient de '.$restab['source'].' - ';
  16.   $cpt=recupniveau($conn, $restab['source'], $cpt);
  17.  }
  18. }
  19. else
  20.  echo ' longueur '.$cpt.'<br>';
  21. $cpt--;
  22. if($cpt<0)
  23.  echo '<br>FIN<br>';
  24. return $cpt;
  25. }
  26. ?>


 
Une chose est sure il faut faire du backtracking mais je bloque sur les valeurs à renvoyer et quand et où incrémenter le compteur... :)
 
Si qqn a une idée, elle est la bienvenue :)


Message édité par zezette le 11-07-2014 à 12:28:40

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
mood
Publicité
Posté le 11-07-2014 à 11:31:40  profilanswer
 

n°2233173
rufo
Pas me confondre avec Lycos!
Posté le 11-07-2014 à 11:56:46  profilanswer
 

En plus, faut que tu trouves le plus court chemin (cf 1->3 mais qui a un autre chemin : 1->5->6->3)
 
Je te déconseille de faire une fonction récursive : ça va flinguer les perfs.
transforme ton algo récursif en algo itératif.
Ex :

Code :
  1. $Destination = 6;
  2. $Sources = array($Destination);
  3. $Index = 0;
  4. while($Index < count($Sources))
  5. {
  6.    $Destination = $Sources[$Index];
  7.    On alimente $Destination via le résultat de la requête "SELECT Source FROM NEW_Liens WHERE destination = $Destination LIMIT 0,1"
  8.    et on garde que le premier résultat trouvé
  9.    If (!empty($Destination))
  10.    {
  11.        $Sources[] = $Destination;
  12.    }
  13.    $Index++;
  14. }
  15.  
  16. echo "Profondeur = ".count($Sources);


 
Mais là, mon algo ne donne qu'un chemin, pas forcément le plus court. Pour ça, faudrait d'abord récupérer tous les chemins possibles puis appliquer l'algo du plus court chemin ( http://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra ).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Calculer la longueur d'un chemin dans une arborescence

 

Sujets relatifs
[Résolut] Calculer ceci en delphi : 20X19X18X17X16la distance de levenshtein pour calculer le nombre d'apparition dans u
Calculer le factorielle d'un nombre. // (Dev-C++)[POWERSHELL] pbl pour lister sous arborescence
[C] Calculer la Normale d'un vecteur en CQuestion, longueur maximale pour poster ?
[PHP] Problème de chemin relatifPasser chemin d'un fichier comme variable
SQL - Chemin des logs des plans de maintenanceChemin le plus court (Dijkstra)
Plus de sujets relatifs à : Calculer la longueur d'un chemin dans une arborescence


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR