我創建了一個專門爲此目的處理2D矢量的類板。我正在努力解決騎士之旅。我想在完成時打印出來。使用遞歸voyagingKnight()函數,我發現它不做任何事情,不打印結果。看來,我想增加遞歸調用的步數,但這是行不通的。C++使用遞歸進行騎士之旅
矢量自變量incs是用於移動騎士的增量矢量的第2個矢量,每行中第一列移動一行,第二列移動列移動。
有沒有人有任何建議,我在這裏的推理缺陷? 相關的代碼
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個電話非常深的遞歸。你確定你不想只使用循環? – lapk