直路Dijkstra的算法实现

时间:2015-03-10 11:33:16

标签: javascript dijkstra path-finding a-star

我最近一直在尝试使用教程here在Javascript中实现Dijkstra的算法。我能够成功绕过障碍物,但它所做的路径根本不是最佳的,通常是非常直的。我认为问题在于他如何实现寻找邻居。他的代码似乎以接近随机的顺序挑选邻居,而我的代码总是以固定顺序选择它们,所以这可能是一个好看的地方。我不能为我的生活弄清楚。我尝试了我能想到的一切。

我的填充实现是:

function floodFill(array,sx,sy,dx,dy){
    var frontier=[[sx,sy]];
    array[sy][sx].visited=true;
    var look=[[-1,0],[0,-1],[1,0],[0,1]];
    var looks=0;
    while(frontier.length>0){
        if(frontier.length>0){
            var current=frontier[0];
            frontier.splice(0,1);
            if(current[0]==dx && current[1]==dy){
                console.log("Broke early!");
                break;
            }
            for(var i=0;i<look.length;i++){
                var y=current[0]+look[i][0];
                var x=current[1]+look[i][1];
                if((y>=0 && y<array[current[0]].length) && (x>=0 && x<array.length)){
                    if(array[y][x].visited==false && array[y][x].type==0){
                        frontier.push([y,x]);
                        looks++;
                        array[y][x].visited=true;
                        array[y][x].origin=[current[0],current[1]];
                        array[y][x].order=looks;

                    }
                }
            }
        }
    }
}

你可以找到一个演示here(你需要打开你的javascript控制台才能看到它)

非常感谢你的时间。

这是我的问题的图像

1 个答案:

答案 0 :(得分:0)

找出答案。简单地说,当我找到邻居时,我没有检查对角线。

You can find a working version here

我改变的部分

var look=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]];