私の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
変数を持っている必要があります複数の試行を行い、また、取られた経路を示したいと考えています。 ありがとう! Wikipediaによると
非常に長い時間を取るのではなく、無限ループであることを確認してください。 –
@JohnBurger 8x8のボードです。 – Stefan
@Stefanそれは質問に答えることはできません.. :)あなたは人々がコードを再現できるように、開始条件を提供してもらえますか?つまり、初期配列 'x'、' y'、 'jmp'はどうでしょうか? – Rob