2012-03-06 26 views
9

私が解決しようとしている問題は、MRTシステムのツリーに関係しています。BFSで実際に見つかったパスを見つけるにはどうすればよいですか?

各ノードは最大4つのポイントに接続することができ、多くを単純化します。ここに私の考えがあります。

struct stop { 
    int path, id; 
    stop* a; 
    stop* b; 
    stop* c; 
    stop* d; 
}; 

私はすべてのポイントを検索するBFSために必要なすべての情報を保存するためにコードを書くことができますが、私の主な関心事は、BFSが適切にポイントを見つけていても、どのように私はそのパスを知ることができる、ということでしょうか?

BFSは各レベルを検索し、その中の1つが目的地に到達すると、実行ループから飛び出し、訪問したキューと未訪問のキューを取得します。ユーザーにどのように伝えるべきでしょうか訪問したキューがBFSが検索したすべてのノードでいっぱいになったときに訪問する必要があるのは何ですか?そうするには

+0

ここで、無視する中国語はどこですか? – mahmood

+0

@mahmoodが投稿した画像に。 –

答えて

19

、あなたはvを「発見」することを各ノードv、頂点uからマップされ、[頂点から頂点へ] map:V->Vを保存する必要があります。

BFSの繰り返し中にこのマップを作成します。

その後 - あなたは単に[地図で]ターゲット・ノードから行くことによってパスを再構築することができます - あなたが元に戻るまでアップし、それが[もちろん、逆に...]ヨールパス

です

頂点を列挙すると、このマップは配列として実装できることに注意してください。

+1

ちょっと、ある長さの複数のパスを追跡しなければならない場合はどうすればよいですか? – bewithaman

+0

@bewithamanそれははるかに難しい問題です。いくつかの 'k 'の長さ' k'のパスがあるかどうかを見つけることはNP-Hardの問題です(それに対して既知の多項式解はありません) – amit

関連する問題