Wczoraj jeden z moich znajomych przyszedł z problemem, prosząc mnie, abym znalazł rozwiązanie.Zdobądź przynajmniej sumę kombinacji elementów matrycy
Problem
Mam matrix(n x m)
. Muszę znaleźć najmniejszą sumę, co mogę wytworzyć z tego elementu macierzy.
Warunkiem jest:
- Liczenie powinno się rozpocząć dopiero od lewej górnej komórki. I
- Powinieneś kończyć się w dolnej prawej komórce.
- Algorytm powinien policzyć wszystkie możliwe ścieżki.
- W ten sposób muszę znaleźć możliwą najmniejszą sumę.
Po kilku godzinach szukam wzoru na to. Ale nie wiem, jak zaimplementować go w kodzie.
Oto mój wzór:
Jak mogę zaimplementować to?
Edit:
$Cost = array();
for ($x = 0; $x < $rows; $x++) {
$Cost[0][$x] = $matrix[0][$x];
for ($y = 1; $y < $cols; $y++) {
$Cost[$y][0] = $matrix[$y][0];
}
}
for ($x = 1; $x < $rows; $x++) {
for ($y = 1; $y < $cols; $y++) {
$Cost[$x][$y] = intval($matrix[$x][$y]) + min(intval($Cost[$x - 1][$y]), intval($Cost[$x][$y - 1]));
}
}
tablica Matrix Staram:
array(2) { [0]=> array(3) { [0]=> string(1) "3" [1]=> string(2) "44" [2]=> string(2) "75" } [1]=> array(3) { [0]=> string(2) "21" [1]=> string(2) "98" [2]=> string(2) "60" } }
Wynik:
array(3) { [0]=> array(2) { [0]=> string(1) "3" [1]=> string(2) "44" } [1]=> array(3) { [0]=> string(2) "21" [1]=> int(119) [2]=> int(0) } [2]=> array(1) { [0]=> NULL } }
sformułować jako problem najkrótszej ścieżki i stosować Dijkstra A *.Długość krawędzi jest sumą wartości komórek – LutzL
Jest to problem ze znalezieniem ścieżki - istnieje kilka użytecznych algorytmów dla czegoś podobnego (A * i jego warianty są dobrym początkiem) – Hulk
Jeśli macierz będzie zawsze tak uporządkowana, to ostatnia ścieżka zawsze byłby najmniejszy. –