Anda di halaman 1dari 2

/*

** Mendapatkan jalur rute dari semua lokasi


** @param $graph_array array semua lokasi
** @param $source id dari lokasi awal
** @param $target id dari lokasi akhir
*/
function dijkstra($graph_array, $source, $target) {
$vertices = array(); // definisikan simpul
$neighbours = array(); // definisikan rute sebelahnya
foreach ($graph_array as $edge) {
array_push($vertices, $edge[0], $edge[1]); // masukkan ke dalam simpul rute ke 1 dan rute ke 2
$neighbours[$edge[0]][] = array("end" => $edge[1], "cost" => $edge[2]); // isikan array rute ke 1
dengan jarak dari rute selanjutnya yaitu rute ke 2 dan ke 3
$neighbours[$edge[1]][] = array("end" => $edge[0], "cost" => $edge[2]); // isikan array rute ke 2
dengan jarak dari rute sebelumnya yaitu rute ke 1 dan rute selanjutnya yaitu rute ke 3
}
$vertices = array_unique($vertices); // menghapus nilai rute yang sama.

foreach ($vertices as $vertex) {


$dist[$vertex] = INF; // definisikan jarak simpul menjadi tidak terhingga (infinite)
$previous[$vertex] = NULL; // definisikan simpul sebelumnya menjadi null
}

$dist[$source] = 0; // definisikan jarak dari titik awal adalah 0


$Q = $vertices; // definisikan $Q
while (count($Q) > 0) { // looping jika jumlah simpul lebih dari 0

$min = INF; // set $min menjadi infinite


foreach ($Q as $vertex){
if ($dist[$vertex] < $min) { // cek apakah $dis[$vertext] < $min
$min = $dist[$vertex]; // jika ya set $min = $dis[$vertext]
$u = $vertex; // dan $u = $vertex;
}
}

$Q = array_diff($Q, array($u)); // mengambil data yang berbeda dari array $Q dan array($u)
if ($dist[$u] == INF or $u == $target) { // cek apakah nilai $dist[$u] == INF or $u == $target
break; // jika ya maka hentikan proses looping
}

if (isset($neighbours[$u])) { // cek apakah simpul $neighbours[$u] memiliki nilai


foreach ($neighbours[$u] as $arr) { // jika ya maka foreach
$alt = $dist[$u] + $arr["cost"]; // dan tambahkan nilai $dist[$u] + $arr['cost']
if ($alt < $dist[$arr["end"]]) { // jika $alt kurang dari $dist[$arr["end"]]
$dist[$arr["end"]] = $alt; // maka $dist[$arr["end"]] = $alt
$previous[$arr["end"]] = $u; // $previous[$arr["end"]] = $u
}
}
}
}
$path = array(); // definisikan rute
$u = $target; // definisikan $u = $target
while (isset($previous[$u])) { // jika nilai $previous[$u] memiliki nilai
array_unshift($path, $u); // tambahkan nilai $u ke $path (asosiatif array)
$u = $previous[$u]; // $u = $previous[$u]
}
array_unshift($path, $u); // tambahkan nilai $u ke $path (asosiatif array)
return $path; // return rute berdasarkan id
}
Kegunaannya adalah menentukan rute terdekat dari lokasi awal. Setelah rute di dapat maka
rute tersebut ditampilkan ke dalam google map berdasarkan urutan rutenya.

Anda mungkin juga menyukai