Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
69
Task/Dijkstras-algorithm/PHP/dijkstras-algorithm.php
Normal file
69
Task/Dijkstras-algorithm/PHP/dijkstras-algorithm.php
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
<?php
|
||||
function dijkstra($graph_array, $source, $target) {
|
||||
$vertices = array();
|
||||
$neighbours = array();
|
||||
foreach ($graph_array as $edge) {
|
||||
array_push($vertices, $edge[0], $edge[1]);
|
||||
$neighbours[$edge[0]][] = array("end" => $edge[1], "cost" => $edge[2]);
|
||||
$neighbours[$edge[1]][] = array("end" => $edge[0], "cost" => $edge[2]);
|
||||
}
|
||||
$vertices = array_unique($vertices);
|
||||
|
||||
foreach ($vertices as $vertex) {
|
||||
$dist[$vertex] = INF;
|
||||
$previous[$vertex] = NULL;
|
||||
}
|
||||
|
||||
$dist[$source] = 0;
|
||||
$Q = $vertices;
|
||||
while (count($Q) > 0) {
|
||||
|
||||
// TODO - Find faster way to get minimum
|
||||
$min = INF;
|
||||
foreach ($Q as $vertex){
|
||||
if ($dist[$vertex] < $min) {
|
||||
$min = $dist[$vertex];
|
||||
$u = $vertex;
|
||||
}
|
||||
}
|
||||
|
||||
$Q = array_diff($Q, array($u));
|
||||
if ($dist[$u] == INF or $u == $target) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (isset($neighbours[$u])) {
|
||||
foreach ($neighbours[$u] as $arr) {
|
||||
$alt = $dist[$u] + $arr["cost"];
|
||||
if ($alt < $dist[$arr["end"]]) {
|
||||
$dist[$arr["end"]] = $alt;
|
||||
$previous[$arr["end"]] = $u;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$path = array();
|
||||
$u = $target;
|
||||
while (isset($previous[$u])) {
|
||||
array_unshift($path, $u);
|
||||
$u = $previous[$u];
|
||||
}
|
||||
array_unshift($path, $u);
|
||||
return $path;
|
||||
}
|
||||
|
||||
$graph_array = array(
|
||||
array("a", "b", 7),
|
||||
array("a", "c", 9),
|
||||
array("a", "f", 14),
|
||||
array("b", "c", 10),
|
||||
array("b", "d", 15),
|
||||
array("c", "d", 11),
|
||||
array("c", "f", 2),
|
||||
array("d", "e", 6),
|
||||
array("e", "f", 9)
|
||||
);
|
||||
|
||||
$path = dijkstra($graph_array, "a", "e");
|
||||
|
||||
echo "path is: ".implode(", ", $path)."\n";
|
||||
Loading…
Add table
Add a link
Reference in a new issue