问题描述
我正在尝试编写一个程序,根据棋盘上的输入点输出骑士巡回赛的动作。出于某种原因,每当我运行这个程序时,我都会遇到一个无限循环。我想了很多,也想不出一个合理的理由。有人可以向我解释一下问题是什么以及如何解决吗?
谢谢!
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 (将#修改为@)