Accueil > > > SAVOIR QUI CONNAÎT QUI DANS UN FORUM/CHAT/...
SAVOIR QUI CONNAÎT QUI DANS UN FORUM/CHAT/...
Information sur la source
Description
Je cherchais à faire un forum avec une fonction comme LinkedIn.com, c'est-à-dire permettant de savoir qui connaît qui parmi les membres. Je me suis donc rabattu sur un peu de théorie des graphes et voici une fonction qui permet de savoir si deux personnes sont liées ou non (directement ou non d'ailleurs) dans un réseau. Mon but avec ce code est de stimuler la création de contacts dans un forum que je développe. Je pose simplement les bases ici, je ne propose pas tout le formulaire permettant de se mettre en réseau, etc. J'vais pas tout faire non plus :-)
Source
- <?php
-
- function connected($start,$end,$order,$connections){
-
- $bool = 0;
- $resultag = 0;
- $link= 0;
- $j=0;
- $arbre[$link] = $start;
- $trace[$link] = $start;
- $newtrace[$link] = $start;
-
- while($bool==0){
-
- $next = count($newtrace);
- $link = count($arbre);
-
- for ($j=0;$j<$next;$j++){
-
- $i=0;
- foreach ($order as $key => $val) {
- if ($val != $newtrace[$j]) $i++;
- else break;
- }
-
- $temp_arbre = $arbre[$j];
- $max = count($connections[$i]);
-
- for ($k=0;$k<$max;$k++){
- $m = 0;
- if (!in_array($connections[$i][$k],$trace)){ // j'ajoute seulement les points inconnus
- $m++;
- $trace[] = $connections[$i][$k];
- $newtrace[] = $connections[$i][$k];
- $arbre[] = $temp_arbre.$connections[$i][$k];
-
- if ($connections[$i][$k] == $end){
- $result = $arbre[count($arbre)-1];
- $resultag++;
- $bool = 1;
- }
- }
- }
- }
- if ($m == 0)
- $bool = 1;
- }
-
- if ($resultag > 0){
- echo 'Le chemin entre '.$start.' et '.$end.' est le suivant: ';
-
- for ($i=0; $i<strlen($result)-1; $i++)
- echo $result[$i].' => ';
- echo $result[strlen($result)-1];
-
- }
- else echo 'Pas de liens entre '.$start.' et '.$end;
- }
-
- // connections
- //
- // Il s'agit d'un arbre non valué
-
- $connections = array();
- $order = array();
-
- $order = array('A','B','C','D','E','F','G');
- $connections[0][0] = 'B';$connections[0][1] = 'C'; // A
- $connections[1][0] = 'A';$connections[1][1] = 'C';$connections[1][2] = 'E'; // B
- $connections[2][0] = 'A';$connections[2][1] = 'B';$connections[2][2] = 'D';$connections[2][3] = 'E';$connections[2][4] = 'F'; // C
- $connections[3][0] = 'C';$connections[3][1] = 'F';$connections[3][2] = 'G'; // D
- $connections[4][0] = 'B';$connections[4][1] = 'C'; // E
- $connections[5][0] = 'B';$connections[5][1] = 'C';$connections[5][2] = 'D'; // F
- $connections[6][1] = 'D'; // G
-
- // Y a-t-il une connection dans l'arbre entre E et G?
-
- $start = 'E';
- $end = 'G';
-
- connected($start,$end,$order,$connections);
-
- ?>
<?php
function connected($start,$end,$order,$connections){
$bool = 0;
$resultag = 0;
$link= 0;
$j=0;
$arbre[$link] = $start;
$trace[$link] = $start;
$newtrace[$link] = $start;
while($bool==0){
$next = count($newtrace);
$link = count($arbre);
for ($j=0;$j<$next;$j++){
$i=0;
foreach ($order as $key => $val) {
if ($val != $newtrace[$j]) $i++;
else break;
}
$temp_arbre = $arbre[$j];
$max = count($connections[$i]);
for ($k=0;$k<$max;$k++){
$m = 0;
if (!in_array($connections[$i][$k],$trace)){ // j'ajoute seulement les points inconnus
$m++;
$trace[] = $connections[$i][$k];
$newtrace[] = $connections[$i][$k];
$arbre[] = $temp_arbre.$connections[$i][$k];
if ($connections[$i][$k] == $end){
$result = $arbre[count($arbre)-1];
$resultag++;
$bool = 1;
}
}
}
}
if ($m == 0)
$bool = 1;
}
if ($resultag > 0){
echo 'Le chemin entre '.$start.' et '.$end.' est le suivant: ';
for ($i=0; $i<strlen($result)-1; $i++)
echo $result[$i].' => ';
echo $result[strlen($result)-1];
}
else echo 'Pas de liens entre '.$start.' et '.$end;
}
// connections
//
// Il s'agit d'un arbre non valué
$connections = array();
$order = array();
$order = array('A','B','C','D','E','F','G');
$connections[0][0] = 'B';$connections[0][1] = 'C'; // A
$connections[1][0] = 'A';$connections[1][1] = 'C';$connections[1][2] = 'E'; // B
$connections[2][0] = 'A';$connections[2][1] = 'B';$connections[2][2] = 'D';$connections[2][3] = 'E';$connections[2][4] = 'F'; // C
$connections[3][0] = 'C';$connections[3][1] = 'F';$connections[3][2] = 'G'; // D
$connections[4][0] = 'B';$connections[4][1] = 'C'; // E
$connections[5][0] = 'B';$connections[5][1] = 'C';$connections[5][2] = 'D'; // F
$connections[6][1] = 'D'; // G
// Y a-t-il une connection dans l'arbre entre E et G?
$start = 'E';
$end = 'G';
connected($start,$end,$order,$connections);
?>
Conclusion
L'exemple dans le code est celui d'un réseau de 7 personnes A, B, C, D, E, F et G. A connaît B et C B connait A, C, E et F C connaît A, B, D, E et F D connaît C, F et G E connaît B et C F connaît B, C et D G connaît D
La question posées est: est-ce que E a un moyen de connaître G? Ce code répond que oui: "Le chemin entre E et G est le suivant: E => C => D => G"
Historique
- 16 décembre 2006 16:23:17 :
- erreur dans le code corrigée ($temp_arbre = $arbre[$j];)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Chat à partir du login et mdp du forum [ par jmobylette ]
Bonjour ! G un forum phpBB2 et je voudrais faire un chat à part mais en utilisant les mêmes pseudos et mdp ! J'ai donc fait un formulaire : http://jmo
integrer un t'chat sur forum phpbb3 [ par champi39 ]
Bonjour, Je voudrais savoir si il est possible d'integrer a un forum (version phpbb3), un mini chat, ou une shoutbox, sans toucher au Mysql.Merci de v
Forum et chat sans base de donné sans cookies Java script !! [ par hackolique ]
regarde ce forum !Bon ben vous allez dire que c'est de la pub je c ce vreme j'ai construis ce forum et un chat sans base de donné ce que tout le mond
Cherche un forum avec login, profil membre et chat... si non, je cherche un développeur et partenaire freelance [ par igorlaszlo ]
Bonjour, j'ai créé un site avec Blogger (Blogspot) et je voudrais intégrer les suivants sur une page dans un iframe (je peux héberger les fichiers su
php chat [ par jpiddy ]
j'ai 1 pbm sur le requete sql, et est ce que qlq1 peut m'aider a savoir comment connaitre ou detecter les internautes inscrits (qui ont de compte) con
[CS]modification titre post du forum [ par philposer ]
Bonjour à tous, Surement mal réveillé, je n'arrive pas à trouver le bouton pour modifier (corriger - éditer) Un de mes posts et/ou titre dans le for
forum [ par youvechka ]
je vient de faire un site web marchand et je veux ajouter le module forum a mon site je veux s'avoir le code php.j'ai utiliser un code dans http://www
Forum très simple [ par fabiin ]
Salut,je cherche un forum très simple.Utilisant mysql mais n'ayant besoin que d'une table pour fonctionner.Avec une petite administration toute gentil
Webring [ par nico606 ]
Salut j'aimerai savoir ou je pourrait trouver un bon script (webring)si y a quelqu'un qui sais !!!.:Nico606:.[<a href="http://nico606.free.fr" t
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|