kSkill : degrés de relation
<?php function main() { $stdin = fopen('php://stdin', 'r'); $stdout = fopen('php://stdout', 'w'); //Write your code here ... // Lecture des 2 protagonistes $infos=trim(fgets($stdin)); $t=explode(';', $infos); $individu1=$t[0]; $individu2=$t[1]; $nb=$t[2]; $tRels=array(); for($i=0;$i<$nb;$i++) { $infos=trim(fgets($stdin)); $t=explode(';', $infos); if(!isset($tRels[$t[0]])) { $individu=new Individu(); $individu->Nom = $t[0]; $tRels[$t[0]]=$individu; } if(!isset($tRels[$t[1]])) { $individu=new Individu(); $individu->Nom = $t[1]; $tRels[$t[1]]=$individu; } $tRels[$t[0]]->addRelation($tRels[$t[1]]); $tRels[$t[1]]->addRelation($tRels[$t[0]]); } // Recherche dans les relations de l'individu 1 $tniveaux=0; foreach($tRels[$individu1]->Relations as $Nom => $individu) { if($individu->Nom==$individu2) { $tNiveaux[]=1; break; } // Si pas déjà cherché, on recherche parmi les relations de l'individu, // pour éviter les boucles infinies... $b = $individu->FindIndividu($individu1, 2, array($individu->Nom )); // Trouvé : on sort if($b) $tNiveaux[] = $b; } sort($tNiveaux); fwrite($stdout, $tNiveaux[0]); fclose($stdout); fclose($stdin); } // Classe de gestion d'individu class Individu { public $Nom=''; public $Relations=array(); // Ajout d'une relation // --> Tableau d'instances de classe public function addRelation(& $individu) { $this->Relations[$individu->Nom] = $individu; } // Recherche récursive public function FindIndividu($aChercher, $niveau, $tDeja) { $tDeja[]=$this->Nom; $b=false; foreach($this->Relations as $Nom => $individu) { // Si trouvé, on renvoit le niveau et on sort avec True if(!in_array($individu->Nom, $tDeja)) { if($individu->Nom==$aChercher) { return $niveau; } // Si pas déjà cherché, on recherche parmi les relations de l'individu, // pour éviter les boucles infinies... $b = $individu->FindIndividu($aChercher, $niveau+1, $tDeja); } // Trouvé : on sort if($b) return $b; } return 0; } } main(); ?>