プロが教える店舗&オフィスのセキュリティ対策術

S→B→C → D →G
  ↓  ↓→E→↑
  →F→→↑

Start(S)からGoal(G)までのとりうる全経路を自動作成するプログラムを
C言語で作成したいです。

上の例だと、
ルート1: SBCDG
ルート2: SBCEG
ルート3: SBFEG
の3つのルートを算出できるプログラムです。

節と節の接続情報は持っているものとします。
S→B
B→C
C→D
D→G
C→E
E→G
B→F
F→E

struct connectList{
int node1;
int node2;
}


struct root{
int nodeId;
int nodeCost;
root_t** next;
};


木構造のような構造体で作成していこうとしたのですが、
ひとつのS→Gまでのパスは作成できるのですが、
すべてのパスを求めるにはどうしたらよいのでしょうか?


データ構造、プログラムサンプルを教えていただけないでしょうか?

A 回答 (2件)

普通はそんな感じでしょう>#1. ただ, 分岐の有無を考えると却って面倒で, 常にスタックに積む方がシンプルだと思います.



一言で言えば「深さ優先探索」.
    • good
    • 0

分岐があったら、それまでにたどった経路をスタックに積んで、一方の枝に進む。


目的に到達したら、スタックから下して、前に辿らなかったほうの枝に進む。
スタックが空になっていたら終わり。
というアルゴリズムはどうですか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!