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 に答える