2016-07-05 14 views
-1

次の問題をどのように細分化する必要がありますか?ツリーを構築してすべてのブランチを抽出する

私はレストランを所有し、今夜のメニューをデザインしたいとします。簡単な例として、私は食材の3種類持って

: 野菜(トマト、ジャガイモ、レタス) 炭水化物(ご飯、パスタ、パン) 肉(豚肉、鶏肉、牛肉)

編集:中実際には、未知の量の成分と成分の種類があります。 私は利用可能なすべての料理のリストを作りたいと思います。上記の例を使用して、各皿は、3つのタイプの成分全てを有するべきである。トマト - ライス - ポーク、トマト - パスタ - チキン、ジャガイモ - パン - ビーフ。

私のアプローチは、これをツリーとして扱い、DFSを行うことです。ツリーが横断されるときにブランチオブジェクトを作成し、各ノードをツリーの底に達するまで各ノードをブランチオブジェクトに追加し、すべてのノードが通過するまで新しいブランチを作成します。これは、組み合わせの一覧が表示されます

       Meals 
        /   |     \ 
       Tomatoes   Potatoes   Lettuce 
      / | \  / | \   / | \ 
     Rice Pasta Bread Rice Pasta Bread Rice Pasta Bread 
    / | \ 
    Beef Pork Chicken 
+0

ジャガイモは炭水化物であり、野菜ではありません:)しかし、haあなたはこれを行うためにXMLを使用すると考えましたか? –

+0

ハハ、私の生物学を刷新しなければならないDavid、訂正してくれてありがとう。 私はこれを行うには、既存のツール/ライブラリを使用する必要があります知っている。学習のために、私は自分自身でこれを実装する方法を勉強したいと思っています。 – learningnewthings

+0

メニュー項目(veg、carb、meat)のそれぞれに対して、トリプルネストされた 'For'ループを使用するだけで、オプションをトラバースできます。結果は27通りあります。私は、Microsoft XML、v6.0ライブラリを使用してXML文書として構築します。 –

答えて

0

::私はXMLライブラリを使用しても理想的

tomatoes-rice-pork 
tomatoes-rice-chicken 
tomatoes-rice-beef 
tomatoes-pasta-pork 
tomatoes-pasta-chicken 
tomatoes-pasta-beef 
tomatoes-bread-pork 
tomatoes-bread-chicken 
tomatoes-bread-beef 
potatoes-rice-pork 
potatoes-rice-chicken 
potatoes-rice-beef 
potatoes-pasta-pork 
potatoes-pasta-chicken 
potatoes-pasta-beef 
potatoes-bread-pork 
potatoes-bread-chicken 
potatoes-bread-beef 
lettuce-rice-pork 
lettuce-rice-chicken 
lettuce-rice-beef 
lettuce-pasta-pork 
lettuce-pasta-chicken 
lettuce-pasta-beef 
lettuce-bread-pork 
lettuce-bread-chicken 
lettuce-bread-beef 

:これはあなたのような出力が得られます

Const vegetables$ = "tomatoes,potatoes,lettuce" 
Const carbs$ = "rice,pasta,bread" 
Const meats$ = "pork,chicken,beef" 

Dim v, c, m, i As Long 

For Each v In Split(vegetables, ",") 
    For Each c In Split(carbs, ",") 
     For Each m In Split(meats, ",") 
      Debug.Print v & "-" & c & "-" & m 
     Next 
    Next 
Next 

ので、以下のようになりますこれをXMLオブジェクトとして構築するには、ファイルなどに簡単に書き込むことができます。

関連する問題