Accueil > Forum > > > > recherche d'un chemin dans une table
recherche d'un chemin dans une table
vendredi 13 janvier 2006 à 15:55:16 |
recherche d'un chemin dans une table

Diafwl1
|
Bonjour, j'ai un problème pour réaliser une fonction qui me permette de rechercher un chemin dans ma base de données. Par exemple prennons une table qui contient 3 champs (par exemple), dans le 1er champs se trouve un ID, dans le 2nd un nom,de ville par exemple, et dans le 3éme un autre nom de ville, une ligne correspond à ville 1 est relier à ville2. ex du contennu de la table : | ID | nom 1 | nom 2 | | 1 | AAA | BBB | | 2 | CCC | AAA | | 3 | BBB | DDD | | 4 | AAA | YYY | | 5 | EEE | YYY | | 6 | DDD | EEE | Si l'utilisateur demande par exemple les chemins pour relier AAA à YYY, le progrmme devra donner comme reponse : 1 - AAA | BBB 1 - BBB | DDD 1 - DDD | EEE 1 - EEE | YYY 2 - AAA | YYY Je n'ai aucun pb pour afficher ce genre de réponse. Pour engendrer cette réponse je parcours la table à la recherche de la ville de depart, ensuite si je la trouve je mets le nom dans un tableau à 2 dimensions(chaque ligne correspond à un chemin possible entre 2 villes), et je reparts de la 2éme ville(devient la nouvelle ville de depart), ainsi de suite jusqu'à temps de trouver le nom de la ville finale. Mon problème est que le programme s'arrète si jamais il rentre (dans l'exemple) dans la 2éme ligne, il affichera : 1 - AAA | CCC Je ne trouve pas comment faire pour revenir en arrière et repartir par un autre chemin (je pense qu'il faut utiliser un arbre n-aire mais je ne sais pas comment l'écrire!)
|
|
mercredi 18 janvier 2006 à 09:47:43 |
Re : recherche d'un chemin dans une table

obcstaff
|
Ah oui, c'est quand meme tendu comme probleme, c'est exactement comme les matrices en maths, je suis dessus j'essaierais de te proposer une solution dans la journée... ++
|
|
mercredi 18 janvier 2006 à 10:21:14 |
Re : recherche d'un chemin dans une table

Diafwl1
|
Voici une partie de mon programme si sa aide :
echo"<table border=\"1\" align=\"center\">"; $new_result = mysql_query("SELECT * FROM rech"); $nb_new_row = mysql_num_rows($new_result); // on affiche la table (pour veriffie le resultat) for($i=0;$i<$nb_new_row;$i++) { mysql_data_seek($new_result,$i); $champs=mysql_fetch_array($new_result); echo "<tr align=\"center\">"; echo'<td>'.$champs[0].'</td><td>'.$champs[1].'</td><td>'.$champs[2].'</td>'; echo"</tr>"; } echo"</table>"; $chemin=array(); // tableau qui ne contiendra qu'un chemin $result_chemin=array(); // tableau qui contiendra tous les chemins possible $prohib=array(); // on entrera l'ID pour ne plus repasser par ce chemin $x=$y=$nb_chemin=$nb_passage=0; $trouve=false; $continue=true; $new_depart=$recu_depart; // on ne modifira que new_depart $new_arrive=$recu_arrive; //while(!$fin) $new_result = mysql_query("SELECT * FROM rech"); $nb_new_row = mysql_num_rows($new_result); for($i=0;($i<$nb_new_row);$i++) { mysql_data_seek($new_result,$i); $champs=mysql_fetch_array($new_result); if(($champs[1]==$new_depart)&&(!in_array($champs[0],$prohib))) { if($champs[2]==$recu_arrive) { array_push($chemin,$champs[1],$champs[2]); // on ajoute a la fin de chemin les champs 1 et 2 array_push($result_chemin,$chemin); // comme le chemin est complet on le rentre dans result_chemin $prohib[$x++]=$champs[0]; $chemin=array(); // on reinitialise chemin } else { if(rech_suite($champs[2])) // on verrifie si on est n'est pas dans un cue-de-sac { array_push($chemin,$champs[1]); $new_depart=$champs[2]; $prohib[$x++]=$champs[0]; } else { if(!rech_suite($champs[1])) // dans le cas ou on est dans un cue-de-sac, // et qu'il n'y a pas d'autre chemin en partant de la valeur dans le champs 1 { $new_depart=$chemin[count($chemin)-1]; // on reprend la valeur de depart precedente unset($chemin[count($chemin)-1]); // on supprime la dernière valeur $prohib[$x++]=$champs[0]; } } $i=-1; } } else if(($champs[2]==$new_depart)&&(!in_array($champs[0],$prohib))) { if($champs[1]==$recu_arrive) { array_push($chemin,$champs[2],$champs[1]); array_push($result_chemin,$chemin); $prohib[$x++]=$champs[0]; $chemin=array(); } else { if(rech_suite($champs[1])) { array_push($chemin,$champs[2]); $new_depart=$champs[1]; $prohib[$x++]=$champs[0]; } else { if(!rech_suite($champs[2])) { $new_depart=$chemin[count($chemin)-1]; unset($chemin[count($chemin)-1]); $prohib[$x++]=$champs[0]; } } $i=-1; } } } // fonction permettant de verrifier si on peut continuer dans cette voie, verrifie si on est pas dans un cue de sac function rech_suite($a) { global $new_result; global $nb_new_row; global $prohib; $trouve=false; for($j=0;(($j<$nb_new_row)&& !$trouve);$j++) { mysql_data_seek($new_result,$j); $ch=mysql_fetch_array($new_result); if((($a==$ch[1])||($a==$ch[2]))&&(!in_array($ch[0],$prohib))) $trouve=true; } return $trouve; } echo "<pre>"; print_r($chemin); echo "</pre>"; echo "<pre>"; print_r($result_chemin); echo "</pre>"; echo "<pre>"; print_r($prohib); echo "</pre>";
à la fin on doit pouvoir afficher plusieurs chemins dans result_chemin et aucun dans chemin, or je n'obtient qu'un seul chemin (lorsque plusieurs existent) dans result_chemin, deplus il bloque toujours lorsqu'il se trouve dans un cue-de-sac !!
|
|
mercredi 18 janvier 2006 à 10:33:35 |
Re : recherche d'un chemin dans une table

Diafwl1
|
A la place de : if(!rech_suite($champs[1])) // dans le cas ou on est dans un cue-de-sac, // et qu'il n'y a pas d'autre chemin en partant de la valeur dans le champs 1 { $new_depart=$chemin[count($chemin)-1]; // on reprend la valeur de depart precedente unset($chemin[count($chemin)-1]); // on supprime la dernière valeur $prohib[$x++]=$champs[0]; }
j'ai rajouté : if(!rech_suite($champs[1])) { if (count($chemin)!=0) // dans le cas ou le chemin est vide { $new_depart=$chemin[count($chemin)-1]; unset($chemin[count($chemin)-1]); } else break; }
(idem pour champs[2])
|
|
mercredi 18 janvier 2006 à 12:29:11 |
Re : recherche d'un chemin dans une table

Diafwl1
|
En fait j'ai separé le programme en 2 fonction : function chemin_direct($dep,$arr) { global $nb_new_row; global $new_result; global $result_chemin; global $prohib; global $x; $direct=false; $chemin=array(); for($i=0;(($i<$nb_new_row)&&!$direct);$i++) { mysql_data_seek($new_result,$i); $ch=mysql_fetch_array($new_result); if(($ch[1]==$dep)&&(!in_array($ch[0],$prohib))) { if($ch[2]==$arr) { array_push($chemin,$ch[1],$ch[2]); array_push($result_chemin,$chemin); $prohib[$x++]=$ch[0]; $chemin=array(); $direct=true; } } else if(($ch[2]==$dep)&&(!in_array($ch[0],$prohib))) { if($ch[1]==$arr) { array_push($chemin,$ch[2],$ch[1]); array_push($result_chemin,$chemin); $prohib[$x++]=$ch[0]; $chemin=array(); $direct=true; } } } return $direct; }
function chemin_indirect($dep,$arr) { global $new_result; global $nb_new_row; global $prohib; global $x; global $result_chemin; $new_depart=$dep; $new_arrive=$arr; $chemin=array(); $indirect=false; for($i=0;(($i<$nb_new_row)&&!$indirect);$i++) { mysql_data_seek($new_result,$i); $champs=mysql_fetch_array($new_result); if(($champs[1]==$new_depart)&&(!in_array($champs[0],$prohib))) { if($champs[2]==$new_arrive) { array_push($chemin,$champs[1],$champs[2]); array_push($result_chemin,$chemin); $prohib[$x++]=$champs[0]; $indirect=true; } else { if(rech_suite($champs[2])) { array_push($chemin,$champs[1]); $new_depart=$champs[2]; //$prohib[$x++]=$champs[0]; } else { if(!rech_suite($champs[1])) { if (count($chemin)!=0) { $new_depart=$chemin[count($chemin)-1]; unset($chemin[count($chemin)-1]); } else break; $prohib[$x++]=$champs[0]; } } $i=-1; } } else if(($champs[2]==$new_depart)&&(!in_array($champs[0],$prohib))) { if($champs[1]==$new_arrive) { array_push($chemin,$champs[2],$champs[1]); array_push($result_chemin,$chemin); $prohib[$x++]=$champs[0]; $indirect=true; } else { if(rech_suite($champs[1])) { array_push($chemin,$champs[2]); $new_depart=$champs[1]; $prohib[$x++]=$champs[0]; } else { if(!rech_suite($champs[2])) { if (count($chemin)!=0) { $new_depart=$chemin[count($chemin)-1]; unset($chemin[count($chemin)-1]); } else break; $prohib[$x++]=$champs[0]; } } $i=-1; } } } return $indirect; }
|
|
mercredi 18 janvier 2006 à 20:52:59 |
Re : recherche d'un chemin dans une table

Diafwl1
|
Mais je ne vois tjs pas pourquoi sa ne marche pas pour la recherche indirect
|
|
mardi 31 janvier 2006 à 11:10:35 |
Re : recherche d'un chemin dans une table
|
Cette discussion est classée dans : table, exemple, chemin, ville, aaa
Répondre à ce message
Sujets en rapport avec ce message
Est-ce possible ? [ par astrolabbcracker ]
Juste une petite question que je me pose depuis plusieurs jours : Est-ce possible d'effectuer une recherche sur mon site, d'interoger un autre site et
Problème Mise à jour plusieurs table [ par jartigues ]
Bonjour,Voila j'ai une base Mysql avec plusieurs table.Je vais vous expliquer par un exemple simple de ce que je veux faire.Alors j'ai une table utili
recherche d'une table SQL conportant CODE DEPARTEMENT , VILLE ... [ par valva ]
recherche d'une table SQL conportant CODE DEPARTEMENT , VILLE REGION ....en fonction de plusieur pays si possibleet mieux encore si vous avé la dist
Réalisation de script [ par oreilly456 ]
Je cherche quelqu'un qui pourrait me faire un script de bonus.J'ai une table client avec nombres de points et tout ce qui faut... J'aimerais juste que
recuperation et insertion [ par snikersmaster ]
bonjour, je veux un aide dans mon programme , je vais expliquer un peux j'ai 2 tables "partenaires" , " journal " partenaires
Selection des champs 1 seul [ par cyberastuces ]
Bonjour,Voilla j'ai une table "annonce" qui contien des ville, apres j'affiche toutes les ville de celle table un fesant une boucle.Selement j'ai un p
script formulaire php [ par ryuk47 ]
bonjour, j'ai créer 2 tables dans ma bdd: "ville" et "alveole1". Dans la table ville, il y a 2 champs: - "id_ville" qui s'incremente quand on rajo
Liaison 2 table et menu déoulant. [ par c3d94 ]
Bonjour a tous, Depuis plusieurs jours (et nuit ) je butte sur comment je doit procédé pour faire cela : 1/ Via une partie Admin je doit inséré un
recuperer et inserer [ par snikersmaster ]
bonjour, je veux un aide pour dans mon programme , je vais expliquer un peux j'ai 2 tables "partenaires" , " journal " partenaires &
Probleme requete sql [ par moza2409 ]
Bonjour à tous, J’ai un petit problème avec une requête sql, j’explique mon problème : J’ai un formulaire d’inscription avec les champs pseudo, ema
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Forum
SELECTSELECT par hab2oo
Cliquez pour lire la suite par hab2oo
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|