2011-12-10 11 views
0

宿題を脱出、私はちょうど私のロジックが健全であるかどうかを尋ねると、そうでない場合は、私が行方不明です何例ではなく、それを行う方法です。が再帰的に迷路

私は与えられたデータファイルからランダムに生成された迷路を作成する必要がありました。各客室には1〜100の数字が割り当てられ、隣接する4つの客室(北、東、南、西)があります。隣接部屋のない部屋には、負の識別子を持つ隣接部屋があります。私たちの "人"はこれらの部屋のうちの1つに無作為に落とされ、私たちはその道を見つけなければなりません。外で私はほとんど行われて行わ再帰が、すべてを持っている0

の部屋番号で指定されています。

void Graph::findPath(Room * curRoom) 
{ 
    if(curRoom -> myNumber == 0) 
    //Escaped! 
    else 
    { 
     if(curRoom -> North -> visited == false) 
    { 
     curRoom -> visited == true; 
     findPath(curRoom -> North) 
    } 

    if(curRoom -> East -> visited == false) 
    { 
     curRoom -> visited == true; 
     findPath(curRoom -> East) 
    } 
    if(curRoom -> South -> visited == false) 
    { 
     curRoom -> visited == true; 
     findPath(curRoom -> South) 
    } 
    if(curRoom -> West -> visited == false) 
    { 
     curRoom -> visited == true; 
     findPath(curRoom -> West) 
    } 
    } 

}私はそれを正しく持っていると思う

:これは私のソリューションです。私の唯一の関心事は、正しいパスを印刷する必要があることです。私はそれができるとわかっていますが、間違ったものを印刷しないとどうやって行うのか分かりません。

ありがとうございます。

すべての情報が欠落している場合は、私が知っていると私はポスト速攻を返信させていただきます。

+0

現在、あなたは何を印刷していない、プラスそれ以外は全く必要ないとして、あなたのように変更する必要がある場合。 – FailedDev

+0

外部がNSEWポインタで何かを指していない部屋なので、ifが必要です。私は悪いメモリにアクセスしたくありません。しかし、私はその情報を共有しませんでした、申し訳ありません。 – Joshua

+0

だから、if(curRoom - > myNumber!= 0){...}をelseなしで書くとどうなりますか? – FailedDev

答えて

1

findPath()関数は、4つのパスすべてを常に部屋の外に出すのではなく、部屋からパスが見つかったかどうかの表示を返す必要があります。 (北への道がわかれば、東、西、または南への道があるかどうかを確認する必要はありません)

部屋をリストこの場所から出て行くパスがない場合には、戻ってくる前にそれを取り除いて再帰する前に、「パス上の場所」を削除します。あなたが出るとき、このリストはあなたが取ったパスを教えてくれます。

+0

私は数分前に似たようなことを考え出しました。私はそれを書いたら私の解決策を投稿します。 – Joshua