【发布时间】:2016-06-14 02:29:58
【问题描述】:
有人能在我的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 变量,因为我正在执行多次试验并且还想显示所采用的路径。
谢谢!
【问题讨论】:
-
你有多确定这是一个无限循环,而不仅仅是花费非常非常长的时间?
-
@JohnBurger 这是一个 8x8 板。
-
@Stefan 那没有回答问题.. :) 能否请您提供起始条件,以便人们可以重现代码?即初始数组
x、y、jmp? -
你有 8 个递归调用,每个调用都可以进行 63 深。 8^63 是一个非常非常大的数字。我知道绝不会每次通话都那么深入 - 但在被之前的访问“逼入绝境”之前,他们会从大量选项开始。
-
@Rob 一切都是0,包括初始矩阵,用0填充
标签: c# recursion knights-tour