我正在尝试用 JavaScript 编写一个算法来解决使用回溯的骑士之旅问题,但它不起作用。基本上,该函数应该输出一个名为visited的数组,其中包含每个移动的位置。但是,没有将位置附加到数组,它仍然是 [[0,0]]。这是我的代码。有什么线索吗?
var unit = 75;
function m1(position) { position[0] += unit; position[1] += 2*unit; return [position[0],position[1]]}
function m2(position) { position[0] -= unit; position[1] += 2*unit; return [position[0],position[1]]}
function m3(position) { position[0] += 2*unit; position[1] += unit; return [position[0],position[1]]}
function m4(position) { position[0] -= 2*unit; position[1] += unit; return [position[0],position[1]]}
function m5(position) { position[0] += unit; position[1] -= 2*unit; return [position[0],position[1]]}
function m6(position) { position[0] -= unit; position[1] -= 2*unit; return [position[0],position[1]]}
function m7(position) { position[0] += 2*unit; position[1] -= unit; return [position[0],position[1]]}
function m8(position) { position[0] -= 2*unit; position[1] -= unit; return [position[0],position[1]]}
var moves = [m1, m2, m3, m4, m5, m6, m7, m8];
var currentPosition = [0, 0];
var visited = [currentPosition];
function knightour(currentPosition)
{
var j;
if (promising(currentPosition))
{
if (visited.length == 64)
{
return visited;
}
else
{
for (j=0; j<moves.length; j++)
{
context.drawImage(knight, currentPosition[0], currentPosition[1]);
alert("NEXT");
visited.push(moves[j](currentPosition));
knightour(currentPosition);
}
}
}
}
function promising(currentPosition)
{
if (currentPosition[0] < 600 && currentPosition[0] >= 0 &&
currentPosition[1] < 600 && currentPosition[1] >= 0 &&
isVisited(currentPosition, visited))
{
return true;
} else {
return false;
}
}
function isVisited(position, visited) // visited is an array of size n of array of size 2 ([x,y])
{ // currentPosition is an array of size 2 ([x,y])
for (var i=0; i<visited.length; i++)
{
if (position[0] == visited[i][0] && position[1] == visited[i][1])
{
return true;
}
}
return false;
}
谢谢你。