是否有人能够在knight's tour code
中找到错误?我似乎无法找到它,而且我得到一个无限循环,而不是堆栈溢出
private bool heuristic(int[,] board, int x, int y, ref int jmp)
{
if (x < 0 || x > 7 || y < 0 || y > 7 || board[x, y] > 0)
return false;
board[x, y] = ++jmp;
if (jmp == 64)
return true;
if (heuristic(board, x + 2, y + 1, ref jmp) ||
heuristic(board, x + 2, y - 1, ref jmp) || heuristic(board, x - 2, y + 1, ref jmp) ||
heuristic(board, x - 2, y - 1, ref jmp) || heuristic(board, x + 1, y + 2, ref jmp) ||
heuristic(board, x + 1, y - 2, ref jmp) || heuristic(board, x - 1, y + 2, ref jmp) ||
heuristic(board, x - 1, y - 2, ref jmp))
return true;
board[x, y] = 0;
jmp--;
return false;
}
并称之为:
var board = new int[8,8];
var x = 0;
var y = 0;
var jmp = 0;
var result = heuristic(board, x, y, ref jmp);
我需要有一个jmp
变量,因为我正在进行多次试验,并且还希望显示所采用的路径。
谢谢!
答案 0 :(得分:2)
根据Wikipedia:
有26,534,728,821,064 [...]次旅行
和
对于除了最小的棋盘之外的其他所有棋盘,蛮力搜索骑士之旅是不切实际的。例如,在8x8电路板上有大约4×10 51 可能的移动序列,并且它远远超出现代计算机(或计算机网络)在如此大的集合上执行操作的能力。然而,这个数字的大小给出了一个令人误解的问题难度的印象,这可以通过使用人类的洞察力和独创性来解决......没有太多困难。“