//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[]}; }