0

有人能找到我的错误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变量,因为我正在执行多次试验并且还想显示所采用的路径。谢谢!

4

1 回答 1

2

根据维基百科

有 26,534,728,821,064 [...] 个旅游团

除了最小的棋盘外,对骑士之旅进行蛮力搜索是不切实际的;例如,在一个 8x8 棋盘上,大约有 4×10 51 个可能的移动序列,而现代计算机(或计算机网络)在如此大的集合上执行操作远远超出了其能力。然而,这个数字的大小给人一种对问题难度的误导印象,可以“通过使用人类的洞察力和聪明才智......没有太大的困难”来解决这个问题。

于 2016-06-14T02:47:39.990 回答