chodzi o to żeby algorytm nie uznawał odwiedzonego miasta z najmniejszą odległością za miasto które musi odwiedzić. Jutro będę kombinował. Dzięki za pomoc i życzę udanego wieczoru

Witam. Przepraszam że tak późno odpisuję ale wyleciało mi z głowy że miałem dać znać co mi wyszło z tym algorytmem. Odnośnie mojego problemu to musiałem stworzyć dodatkową tablicę w której przetrzymywałem odwiedzone miasta i do której algorytm odwoływał się za każdym razem gdy wybierał kolejne miasto do odwiedzenia. Poniżej kod gotowego algorytmu.
<?php
$miasto[0] = 'wroclaw';
$miasto[1] = 'krakow';
$miasto[2] = 'gdansk';
$miasto[3] = 'poznan';
$miasto[4] = 'lodz';
'krakow' => '150',
'gdansk' => '300',
'poznan' => '276',
'lodz' => '290'
);
'wroclaw' => '150',
'gdansk' => '236',
'poznan' => '125',
'lodz' => '185',
);
'wroclaw' => '300',
'krakow' => '236',
'poznan' => '100',
'lodz' => '150',
);
'wroclaw' => '276',
'gdansk' => '100',
'krakow' => '125',
'lodz' => '130',
);
'wroclaw' => '290',
'gdansk' => '150',
'krakow' => '185',
'poznan' => '130',
);
$miasto_poczatek = 'poznan'; // inicjacja miasta startowego
for($a = 0; $a < sizeof($miasto); $a++){
if($miasto[$a] == $miasto_poczatek){
$start = $a;
}
}
$zlicz = 0;
$zlicz2 = 0;
$zlicz3 = 1;
$miasto_koniec[] = array();
reset ($wybor[$start]); // Funkcja ta powoduje powrót do pierwszego elementu tablicy
while (list
($klucz, $wartosc) = each ($wybor[$start])) {
$miasto_koniec[$zlicz] = $klucz;
$miasto_koncowe = $miasto_koniec[0];
$pomocnicza = $miasto_koniec[0];
$zlicz++;
}
$zlicz = 0;
for($b = 0; $b < sizeof($miasto); $b++){
$miasto[$b] = $miasto_koncowe; // inicjacja kolejnych miast
for($c = 0; $c < sizeof($miasto); $c++){
if(($miasto[$c] == $miasto[$b])){
$odwiedzone[0] = $miasto_poczatek; // miasta
$odwiedzone[1] = $pomocnicza; // nie włączone do poniższej pętli
reset ($wybor[$c]); // Funkcja ta powoduje powrót do pierwszego elementu tablicy
while (list
($klucz2, $wartosc2) = each ($wybor[$c])) {
$miasto_koniec[$zlicz] = $klucz2;
$zlicz++;
}
for($d = 0; $d < sizeof($miasto); $d++){ if (!in_array($miasto_koniec[$d], $odwiedzone)) { $niemamiast[$zlicz2] = $miasto_koniec[$d];
$zlicz2 += 1;
}
$nowypunkt = $niemamiast[0];
}
$odwiedzone[$zlicz3] = $nowypunkt;
$zlicz3 += 1;
$zlicz2 = 0;
}
$miasto_koncowe = $odwiedzone[$b+1];
$zlicz = 0;
}
}
echo 'Odwiedzone miasta to: </br>'; for($e = 0; $e < sizeof($miasto); $e++){ if($e != 4){
$znak = "->";
}
else{
$znak = ".";
}
echo $odwiedzone[$e].$znak; }
?>
Program działa poprawnie pod warunkiem że za miasto startowe nie wybierzemy pierwszego miasta z listy. Jeżeli miastem startowym w tym przypadku będzie Wrocław to algorytm weźmie kilka razy pod uwagę pierwszą tablicę. Wrzucam algorytm bo może komuś się przyda. Wydaje mi się że wystarczy usuwać tablice które zostały już odwiedzone ale nie jestem do końca pewien.
phpamator dzięki za twoją pomoc, która rozwiązała mój problem ze sprawdzaniem czy dane miasto zostało odwiedzone. Temat do zamknięcia. Dziękuję