parent
0aa3e3de59
commit
ab1a2fa905
2 changed files with 104 additions and 8 deletions
@ -0,0 +1,92 @@ |
|||||||
|
//implemtantion of dijkstra algorithm
|
||||||
|
|
||||||
|
|
||||||
|
var max = Number.MAX_SAFE_INTEGER; |
||||||
|
|
||||||
|
|
||||||
|
function findNodeWithMinDist(list){ |
||||||
|
var result = ""; |
||||||
|
var dist = max; |
||||||
|
for(var i = 0; i < list.length; i++){ |
||||||
|
for(var j = 0; j < list[i].length; j++){ |
||||||
|
if(dist < list[i][j]){ |
||||||
|
dist = list[i][j]; |
||||||
|
result = i+"$"+j; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
function getNeighbours(array, i,j){ |
||||||
|
var result = []; |
||||||
|
if(i - 1 > -1 && i+1 < array.length){
|
||||||
|
if(j-1 > -1 && j+1 < array.length){ |
||||||
|
for(var k = -1; k < 2; k++){ |
||||||
|
for(var l = -1; l < 2; l){ |
||||||
|
if(array[i][j].accessible){ |
||||||
|
result.push(i+"$"+j); |
||||||
|
} |
||||||
|
}
|
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
for(var k = -1; k < 2; k++){ |
||||||
|
for(var l = -1; l < 2; l){ |
||||||
|
try{ |
||||||
|
if(array[i][j].accessible){ |
||||||
|
result.push(i+"$"+j); |
||||||
|
} |
||||||
|
} catch(e){ |
||||||
|
console.log("zugriff auserhalb des feldes");
|
||||||
|
} |
||||||
|
}
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
*/ |
||||||
|
function dijkstra(array, start_i, start_j, end_i,end_j){ |
||||||
|
var Q = new Set(); |
||||||
|
var distance = []; |
||||||
|
var pre = []; |
||||||
|
|
||||||
|
|
||||||
|
for(var i = 0; i < array.length; i++){ |
||||||
|
for(var j = 0; j < array[i].length; j++){ |
||||||
|
distance[i][j] = max; |
||||||
|
pre[i][j] = null; |
||||||
|
Q.add(i+"$"+j); |
||||||
|
} |
||||||
|
} |
||||||
|
distance[start_i][start_j] = 0; |
||||||
|
|
||||||
|
while !(Q.size === 0){ |
||||||
|
var node = findNodeWithMinDist(distance); |
||||||
|
Q.delete(node); |
||||||
|
var indices = node.split("$"); |
||||||
|
var neighbours = getNeighbours(array,indicies[0],indices[1]); |
||||||
|
for(var i = 0; i < indices.length; i++){ |
||||||
|
var alt = dist[indices[0]][indices[1]]+1; |
||||||
|
if(Q.has(neighbours[i])){ |
||||||
|
var indices_neighbour = neighbour[i].split("$"); |
||||||
|
if(alt < dist[indices_neighbour[i]][indices_neighbour[j]]){ |
||||||
|
dist[indicies_neighbour[i]][indices_neighbour[j]] = alt; |
||||||
|
pre[indices_neighbour[i]][indices_neighbour[j]] = node; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return {dist: distance[], pre: pre[]};
|
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue