我正在尝试在JavaScript中为我的寻路机器人实现A *算法。唯一的问题是我不明白找到所有相邻的正方形是什么意思。我正在使用曼哈顿距离公式,因为我不能让我的机器人对角线。这是我的代码(现在):
var open = new Array();
var closed = new Array();
start = [9,18]; //do not take this literally
goal = [1,0]; //again don't
open.push(start);
while (open.length != 0) {
for(var x = 0; x < open.length; x++) {
heuristicValue[x] = computeHeuristicV(maplayout, start[0], start[1], open[x][0], open[x][1], goal[0], goal[1]);
}
minimum = Math.min(100000,heuristicValue[0]);
for(var x = 1; x < open.length; x++) {
minimum = Math.min(minimum, heuristicValue[x]);
}
for(var x = 0; x < open.length; x++) {
if (minimum == heuristicValue[x]) {
current = [open[x][0], open[x][1]];
}
}
closed.push(current);
//INCOMPLETE
}
computeHeuristicV函数计算上面代码中的启发式值。
答案 0 :(得分:1)
“所有相邻的正方形”表示路径上的每个可能的下一跳。
答案 1 :(得分:0)
A *是一个很好的算法来掌握和使用。两个关键要素是寻找邻居和启发式。启发式用于估计当前位置与结束之间的距离。此外,声明&#34;找到所有相邻的正方形&#34;正在引用邻居函数。例如,您可能具有以下内容:
var heuristic = function(state) {
var endLocation = MyGame.getEndLocation();
return Math.abs(state.x - endLocation.x) + Math.abs(state.y - endLocation.y)
}
var neighbors = function(state){
var neighborStates = [];
MyGame.setPlayer({
x: state.x,
y: state.y
});
neighborStates.push(MyGame.moveUp.getState());
neighborStates.push(MyGame.moveRight.getState());
neighborStates.push(MyGame.moveDown.getState());
neighborStates.push(MyGame.moveLeft.getState());
return neighborStates;
}
因此,获得相邻的正方形&#34;只是问你邻近的州或选择。个人插件:我刚刚在这里创作了一个简单的a-star算法:https://github.com/tssweeney/async-astar。阅读说明可能有助于您更好地理解问题。