Skip to content

Instantly share code, notes, and snippets.

@sofyan48
Created September 16, 2015 12:47
Show Gist options
  • Save sofyan48/20a3f03dfcbb3cd59034 to your computer and use it in GitHub Desktop.
Save sofyan48/20a3f03dfcbb3cd59034 to your computer and use it in GitHub Desktop.
Algoritma Dijkstra Dengan Javascript
//algoritma dijkstra
function Dijkstra(roads, source, dest) {
var inf = Number.POSITIVE_INFINITY;
var distance = {};
var done = {};
var pred = {};
for (var i in roads) {
// jalan tidak diketahui
distance[i] = inf;
pred[i] = 0;
done[i] = false;
}
// jalan dari tempat to ketujuan = 0
distance[source] = 0;
for (i in roads) {
var minDist = inf, closest;
for (var j in roads) {
if (!done[j]) {
if (distance[j] <= minDist) {
minDist = distance[j];
closest = j;
}
}
}
done[closest] = true;
if (closest === dest) {
break;
}
var neighbors = roadsFrom(closest);
for (var nb in neighbors) {
var w = neighbors[nb];
if (!done[nb]) {
if (distance[closest] + w < distance[nb]) {
distance[nb] = distance[closest] + w;
pred[nb] = closest;
}
}
}
}
// Selesai, cetak jalur.
i = dest;
if (distance[i] < inf) {
var thePath = i;
var place = i;
while (place !== source) {
place = pred[place];
if (place !== source) {
thePath = place + '->' + thePath;
}
}
thePath = place + '->' + thePath;
//console.log("Distance from " + source + "-->" + dest + " : "+distance[i]);
return [distance[i],source,dest];
} else {
console.log("no path");
}
}
var roads = {};
function makeRoad(from, to, length) {
function addRoad(from, to) {
if (!(from in roads)) {
roads[from] = {};
}
roads[from][to] = length;
}
addRoad(from, to);
addRoad(to, from);
}
function makeRoads(start) {
for (var i = 1; i < arguments.length; i += 2) {
makeRoad(start, arguments[i], arguments[i + 1]);
}
}
function roadsFrom(place) {
var found = roads[place];
if (found === undefined) {
console.log("No place named '" + place + "' found.");
} else {
return found;
}
}
//use
var a= 10,
+ b= 15,
+ c= 13,
+ d= 5;
+ makeRoads("A", "B", a, "C", b);
+ makeRoads("B", "C", c, "D",d);
+ var hasil = Dijkstra(roads, "B", "C");
console.log(hasil);
@achilan
Copy link

achilan commented Jan 8, 2021

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment