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
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
BANNIR IP DUN CHAT URGENT [ par Wars007 ]
salut je voudrais savoir un code php pour bannir une simple adresse ip dun chat sans connecion mysql.merci :)PS:(je ve le bannir car il floof tlt!)
Script chat audio [ par glamrani ]
Bonjour tt le monde,Je veut savoir, c'est possible de créer un script, qui une fois intégrer à une page Web, elle permit de capturer la voix provenant
Problème de changement de style sur un forum [ par Inepsy11 ]
Bonjour à tous, Je suis étudiant en bts IG1 et je dois créer un forum php. Il se pose à moi un problème: lorsque je me suis authentifié, je dispose
mise en page du forum [ par jreaux62 ]
C'est une suggestion plutot qu'une question, et qui s'adresse au team qui s'occupe de la mise en page de ce site :--> sur la page http://www.phpcs.
Problème avec une requête contenant LEFT JOIN. [ par MonPied ]
Bonjour, j'explique mon problème, après un sujet ou je demandais de l'aide pour éviter de faire plein de fois une requête un Zéro me proposa d'uti
|
Derniers Blogs
SQL SERVER : PHP ET SQL SERVERSQL SERVER : PHP ET SQL SERVER par christian
Juste une petite synthèse sur les possibilités de connecter une application PHP sur un serveur SQL Server. Non pas que je me sois reconverti en développeur PHP, mais je constate qu'actuellement il est très difficile dans un environnement PHP et partic...
Cliquez pour lire la suite de l'article par christian [TECHDAYS 2010] WINDOWS AZURE APPFABRIC (CLO305)[TECHDAYS 2010] WINDOWS AZURE APPFABRIC (CLO305) par NeuroCypher
Les webcasts sont désormais en ligne, je me décide donc à écrire ce post. J'ai encore eu la chance d'animer une session aux TechDays cette année. Le sujet : le même que l'année dernière, ou plutôt son évolution. En effet, l'année dernière la couche de com...
Cliquez pour lire la suite de l'article par NeuroCypher OUTILS D'IMPORT AVEC MISE à JOUR DANS MICROSOFT DYNAMICS CRMOUTILS D'IMPORT AVEC MISE à JOUR DANS MICROSOFT DYNAMICS CRM par bianca
Problématique
Si vous avez besoin d'exporter sous Excel une liste de comptes ou de contacts dans le but de faire des retouches à droite à gauche puis de réinjecter le tout dans CRM, vous ne pouvez pas vous en...
Cliquez pour lire la suite de l'article par bianca SQL SERVER : DéVELOPPER UN ADDON POUR SQL SERVER MANAGEMENT STUDIO (SSMS)SQL SERVER : DéVELOPPER UN ADDON POUR SQL SERVER MANAGEMENT STUDIO (SSMS) par christian
Pour celles et ceux qui aiment SQL Server et on l'âme de développeur (ou sont tout simplement développeur) et veulent étendre les fonctionnalités de SQL Server, voici un article qui devrait pouvoir un intéresser.
Certes ce dernier est écrit sur u...
Cliquez pour lire la suite de l'article par christian EDITEUR XAML DE VISUAL STUDIO: COMMENT ALIGNER LES ATTRIBUTS LES UNS EN DESSOUS DES AUTRES AUTOMATIQUEMENTEDITEUR XAML DE VISUAL STUDIO: COMMENT ALIGNER LES ATTRIBUTS LES UNS EN DESSOUS DES AUTRES AUTOMATIQUEMENT par Miiitch
Lorsque l'on écrit du XAML, les tags XML peuvent vraiment devenir très longs et pas pratique à lire: Il y a une option vraiment pratique dans l'éditeur de Visual Studio qui va nous permettre de réorganiser tout cela en mettant les attributs XAML les uns e...
Cliquez pour lire la suite de l'article par Miiitch
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|