この目的のために、特に 2 次元ベクトルを扱うクラス Board を作成しました。ナイツツアーを解決しようとしています。出来上がったらプリントアウトしたい。再帰的な voyagingKnight() 関数を使用すると、何も実行されず、結果が出力されないことがわかりました。再帰呼び出しのステップ番号を増やしたいようですが、これは機能していません。
ベクトル引数 incs は、ナイトを移動するための増分の 2 次元ベクトルです。各行では、最初の列で行が移動し、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);
}