0

この目的のために、特に 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); 

    }
4

3 に答える 3

0

ボードをグローバル変数にし、グローバル変数でも一連の訪問された正方形を構築します。各暫定ステップを撤回するときは、すべての変更を元に戻すようにしてください (訪問した正方形、シーケンスの最後のステップ)。騎士のツアー関数を呼び出し、最後に到達したら成功を返すようにし、終了後に出力を行います。

シバン全体をファイルまたはクラスとしてパッケージ化して、個人的な詳細が詮索好きな目にさらされないようにします。

于 2014-03-08T16:35:36.590 に答える