【发布时间】:2014-03-05 08:56:27
【问题描述】:
我创建了一个专门为此目的处理 2d 向量的类 Board。我正在尝试解决骑士之旅。我想在完成后打印出来。使用递归 voyagingKnight() 函数,我发现它没有做任何事情,也没有打印结果。似乎我想增加递归调用的步骤号,但这不起作用。
向量参数 incs 是用于移动马的 2d 增量向量,在每一行中,第一列中移动一行,第二列中移动一列。
有没有人对我的推理有任何建议? 相关代码
bool voyaging_knight( Board &board, int i, int j, int steps ,vector< vector<int> > &increments)
{
if( !newplace(theboard, i, j) ) return false;
board.setval(i,j,step);
if( gone_everywhere( board, steps) )
{
cout <<"DONE" << endl;
board.showgrid();
return true;
}
int n;
int in, jn;
for(n=0; n<8; n++ )
{
in = i + increments[n][0];
jn = j + increments[n][1];
if( inboard(board, i, j)&& newplace(board,i,j) )
{
voyaging_knight( board, in, jn, steps+1 ,increments);
return true;
}
}
theboard.setval(i,j,-1);
}
【问题讨论】:
-
这将是一个普通棋盘上 64 次调用的非常深的递归。您确定不想只使用循环吗?
标签: c++ recursion knights-tour