/ Forside/ Teknologi / Udvikling / PHP / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Mindste forbindelse mellem pr
Fra : Lasse_Madsen
Vist : 779 gange
75 point
Dato : 18-10-06 08:57

Jeg tror, dette handler om en kodning i PHP, og jeg stiller derfor spørgsmålet her
Hvis man har en MySQL-tabel med en række, hvor en person's id ligger, og der i den anden ligger et id, som han hun er venner med som fx:
bruger | ven
1 | 2
2 | 3
3 | 4
2 | 4

Hvordan kan man så finde ud af, at den korteste forbindelse mellem 1 og 4 er 1->2->4 og ikke 1->2->3->4, da 2 og 3 jo begge er venner med 4

 
 
Kommentar
Fra : præceptor


Dato : 29-10-06 07:33

Jeg kan ikke besvare dit spørgsmål, men undrer mig over formuleringen, at du tror det handler om en kodning i PHP.

I mine øjne ser det mere ud som et algoritmisk spørgsmål?



Kommentar
Fra : Lasse_Madsen


Dato : 29-10-06 19:54

præceptor -> Det skyldes, at jeg ikke vidste, om jeg skulle putte spørgsmålet i PHP eller MySQL-gruppen, men har du nogle idéer til, hvor jeg så kan lægge spørgsmålet

Kommentar
Fra : præceptor


Dato : 29-10-06 23:13

Næh, jeg var blot i tvivl om, hvorvidt det var den algoritmiske side af sagen eller en konkret PHP baseret implementering der havde din interesse


Accepteret svar
Fra : Eckankar

Modtaget 75 point
Dato : 29-10-06 23:42

Du kan fx bruge følgende:

Kode
function shortPath($from, $to)
{
$queue = array($from);
$active = 0;
$prev = array();
$prev[$from] = 0;

while ( count($queue) > 0 )
{
$active = array_shift($queue);
$dbresult = mysql_query("SELECT * FROM `venner` WHERE `bruger` = $active OR `ven` = $active;");
while ($enven = mysql_fetch_assoc($dbresult))
{
$enven = ($enven['ven'] == $active ? $enven['bruger'] : $enven['ven']);
if (!empty($prev[$enven]))
continue;
$prev[$enven] = $active;
array_push($queue,$enven);

if ($enven == $to)
return backTrack($from, $to, $prev);
}
}
return "No path exists between $from and $to";
}

function backTrack($from, $to, $prev)
{
$output = array($to);
$active = $to;
while ($active != $from)
{
$active = $prev[$active];
array_unshift($output,$active);
}
return $output;
}


Demonstation:
http://www.mathemaniac.org/php/venneting.php
(Kildekode: http://www.mathemaniac.org/php/venneting.php?source)

Kommentar
Fra : Lasse_Madsen


Dato : 31-10-06 02:47

Eckankar -> Jeg takker mange gange, for jeg har brugt omkring en måned om at tænke, hvordan det kunne lade sig gøre

Godkendelse af svar
Fra : Lasse_Madsen


Dato : 31-10-06 02:48

Ups, glemte at trykke på Accepter, men mange tak for svaret

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste