0

私は、講師が提供したこの課題にひどく苦労しています。このソリューションに必要なクラスを設定するファイルをプログラムしましたが、実装方法がわかりません。アルゴリズムを追加する必要がある問題のクラスは次のとおりです。

#include "Solver.h"

int* Solver::findNumPaths(const MazeCollection& mazeCollection)
{
    int *numPaths = new int[mazeCollection.NUM_MAZES];


    return numPaths;
}

これが提供された問題の説明です。これを実装する方法、または私を正しい軌道に乗せる方法を知っている人はいますか?ありがとう!

00C、また助けが必要です。

阻止されたことに腹を立て、悪魔のように邪悪な首謀者であるラッセロ・ケイン博士は、重装備のリスの群れを解き放ち、BCB を攻撃し、素晴らしく美しく知的で優れたコンピューティングの学生をすべて排除しました。

この脅威に早急に対応する必要があり、BCB のホワイエを部分的にバリケードする計画があります。銃を持ったリスは正方形 [1,1] で BCB に入り、[10,10] に示されている出口に向かって突進します。

バリケードで囲まれた広場は、毛皮で覆われたげっ歯類には通行できません。重要なことに、リスの血への渇望は、出口に向かってのみ移動するようなものです。つまり、右に 1 マス移動するか、1 マス下に移動します。バリケードが彼らの接近を妨げていても、リスは決して上にも左にも移動しません。

私たちのボフィンは、バリケードの配置がリスの動きをどのように妨げるかを判断するために、多数のテストを実行する必要があります. 各テストでは、いくつかの正方形がバリケードされ、開始から終了までのさまざまな経路の総数を決定する必要があります (上記のリスの移動パターンに従います)。

多くのボフィンが、再帰カウント アルゴリズムについて一貫性のないことをつぶやいたり、再帰と反復の関係についてつぶやいたりするのを聞いたことがありますが、OOC さん、誤解を招くようなアドバイスに惑わされるよりはましだと思います。

4

1 に答える 1

0

明らかなことから始めます:

int count = 0;

void countPaths( x, y ) {
  if ( x==10 && y==10 ) {
    count++;
    return;
  }
  if ( can-move-right )
    countPaths( x+1, y );
  if ( can-mopve-down )
    countPaths( x, y+1 );
}

に電話することから始めcountPaths(0,0)ます。

ロングショットで最も効率的ではありませんが、うまくいきます。次に、最適化する方法を探します (たとえば、ゴールに近い正方形からパスを再計算することになります。その作業を減らすと、大きな違いが生じる可能性があります)。

于 2013-02-15T15:58:12.273 に答える