构建树木并提取所有分支

时间:2016-07-05 14:13:29

标签: vba

我应该如何将以下问题分解为更小的部分?

假设我有一家餐馆,想要设计今晚的菜单。

举个简单的例子,我有3种成分: 蔬菜(西红柿,土豆,生菜) 碳水化合物(米饭,面食,面包) 肉(猪肉,鸡肉,牛肉)

编辑:在实践中,有一定数量的成分和成分类型。 我想列出所有可用的菜肴。使用上面的例子,每个菜应该具有所有3种类型的成分,例如,西红柿 - 大米猪肉,西红柿 - 意大利面 - 鸡肉,土豆 - 面包 - 牛肉。

原则上,我的方法是将其视为一棵树,做一个DFS。创建分支对象,在遍历树时,将每个节点添加到分支对象,直到搜索到达树的底部,然后创建新分支,直到每个节点都经过。所以它看起来像下面这样:

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

1 个答案:

答案 0 :(得分:0)

这将列出组合:

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

这将为您提供如下输出:

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

理想情况下,虽然我会使用XML库将其构建为XML对象,但您可以轻松地将其写入文件等。