Sky_Flex
Новичок
так. вот сделал Дейкстру, вроде...
т.е. находит вроде коэффициенты минимальных путей к вершине.
а как сами пути вытащить миимальные?
-~{}~ 17.06.07 17:20:
ну в моем алгоритме ошибка...
вот для такого графа не работает, и не могу понять как завтавить работать...
т.е. находит вроде коэффициенты минимальных путей к вершине.
а как сами пути вытащить миимальные?
PHP:
# ВЕРШИНЫ
$M = array(1,1,1,1,1);
# МАССИВ РАСМАТРИВАЕМЫХ СЕЙЧАС ВЕРШИН
#$M1 = array();
# МАССИВ ПРОЙДЕННЫЙ ВЕРШИН
$M2 = array(0,0,0,0,0);
# МАССИВ РАСТОЯНИЙ, ВНАЧАЛЕ ВСЕ БЕСКОНЕЧНОСТИ,КРОМЕ ПЕРВОГО
$A = array(0,1000,1000,1000,1000);
# МАТРИЦА СМЕЖНОСТИ
$C = array(
# -1-2-3-4-5-
array(0,2,0,5,0), #-1-
array(2,0,3,2,4), #-2-
array(0,3,0,6,2), #-3-
array(5,2,6,0,0), #-4-
array(0,4,2,0,0));#-5-
# количесвто вершин
$n = sizeof($M);
while (array_key_exists(0, array_flip($M2))) {
$min = $n - 1;
# найдем минимальное растоянии
for ($i=0; $i<$n; $i++)
if (!$M2[$i] && $A[$i] <= $A[$min])
$min = $i;
$M2[$min] = 1;
for ($i=0; $i<$n; $i++)
if (!$M2[$i] && $C[$min][$i] && ($A[$i] > $A[$min] + $C[$min][$i]))
$A[$i] = $A[$min] + $C[$min][$i];
}
echo '<pre>';
print_r ($A);
echo '</pre>';
ну в моем алгоритме ошибка...
вот для такого графа не работает, и не могу понять как завтавить работать...
PHP:
# ВЕРШИНЫ
$M = array(1,2,3,4,5,6,7,8);
# МАССИВ ПРОЙДЕННЫЙ ВЕРШИН
$M2 = array(0,0,0,0,0,0,0,0);
# МАССИВ РАСТОЯНИЙ, ВНАЧАЛЕ ВСЕ БЕСКОНЕЧНОСТИ,КРОМЕ ПЕРВОГО
$A = array(0,1000,1000,1000,1000,1000,1000,1000);
# МАТРИЦА СМЕЖНОСТИ
$C = array(
# -1-2-3-4-5-6-7-8
array(0,2,0,5,0,0,0,0), #-1-
array(2,0,3,2,4,7,0,0), #-2-
array(0,3,0,6,2,3,0,0), #-3-
array(5,2,6,0,0,0,1,0), #-4-
array(0,4,2,0,0,0,0,9), #-5
array(0,7,3,0,0,0,0,0), #-6-
array(0,0,0,1,0,0,0,2), #-7-
array(0,0,0,0,9,0,2,0));#-8