如何解决KnightsTour 无限循环迭代
我正在尝试编写一个程序,根据棋盘上的输入点输出骑士巡回赛的动作。出于某种原因,每当我运行这个程序时,我都会遇到一个无限循环。我想了很多,也想不出一个合理的理由。有人可以向我解释一下问题是什么以及如何解决吗?
谢谢!
public ArrayList<String> tour (int x,int y) {
int[][] board = new int[8][8];
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
board[i][j] = -1;
}
}
int[] xMoves = {-2,-2,-1,1,2,2};
int[] yMoves = {1,-1};
int lastIndex = 0;
ArrayList<Integer> indices = new ArrayList<>();
ArrayList<String> visited = new ArrayList<>();
visited.add("" + x + y);
while (visited.size() < 64) {
int i;
for (i = lastIndex; i < 8; i++) {
int xCoor = xMoves[i] + x;
int yCoor = yMoves[i] + y;
if (xCoor >= 0 && xCoor <= 7 && yCoor >= 0 && yCoor <= 7
&& board[xCoor][yCoor] == -1)
{
x = xCoor;
y = yCoor;
indices.add(i);
visited.add("" + x + y);
board[x][y] = 0;
lastIndex = 0;
break;
}
}
if (i < 7) {
continue;
}
/*
If no possible moves left,backtrack
*/
board[x][y] = -1;
lastIndex = indices.remove(indices.size() - 1);
visited.remove(visited.size() - 1);
x -= xMoves[lastIndex];
y -= yMoves[lastIndex];
lastIndex++;
}
return visited;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。