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