c++ - 给定一组不同高度的堆栈,我如何选择所有可能的组合?

标签 c++ arrays algorithm stack

输入总成本。

输出:给出所需成本的所有水平组合。

每个堆栈的每个级别都花费不同的金额(堆栈 1 中的级别 1 与堆栈 2 中的级别 1 的成本不同)。我有一个函数,可以根据我手动输入(硬编码)的基本成本(级别 1)将级别转换为实际成本。

我需要找到能给我输入成本的级别组合。我意识到有不止一种可能的解决方案,但我只需要一种方法来遍历每一种可能性。

这是我需要的:

input = 224,这是一个的解决方案: these are the costs


我正在制作一个简单的程序,需要选择不同堆栈的级别,然后计算成本,并且我需要知道存在的每一种可能的成本......每个堆栈的每个级别都需要不同的金额,但是这不是问题,问题是如何为每个堆栈选择一个级别。

我可能解释得很含糊,所以这是一张图片(你不得不原谅我糟糕的绘画技巧):

these are the maximum levels

因此,所有堆栈的级别为 0,级别 0 始终花费 0 金钱。

附加信息:

  • 我有一个名为“maxLevels”的数组,该数组的长度是堆栈的数量,每个元素是该堆栈中最高级别的数量(例如,maxLevels[0] == 2)。<
  • 您可以从第 1 级开始迭代,因为第 0 级根本不重要。
  • 所选级别应保存在类似于 maxLevels(相同长度)的数组(名称:“currentLevels”)中,但它不包含堆栈的最大级别,而是包含堆栈的选定级别(例如: 当前水平[3] == 2).
  • 我正在用 C++ 编程,但伪代码也很好。
  • 不是家庭作业,我这样做是为了好玩(基本上是为了游戏)。

最佳答案

我不确定我是否理解这个问题,但以下是如何从每个堆栈中选择一个项目的所有可能组合(在本例中为 3*1*2*3*1 = 18 种可能性):

void visit_each_combination(size_t *maxLevels, size_t num_of_stacks, Visitor &visitor, std::vector<size_t> &choices_so_far) {
    if (num_of_stacks == 0) {
        visitor.visit(choices_so_far);
    } else {
        for (size_t pos = 0; pos <= maxLevels[0]; ++pos) {
            choices_so_far.push_back(pos);
            visit_each_combination(maxLevels+1, num_of_stacks-1, visitor, choices_so_far);
            choices_so_far.pop_back();
        }
    }
}

您可以将 visitor.visit 替换为您想对每个组合执行的任何操作,以使代码更加具体。我使用了 vector choices_so_far 而不是数组 currentLevels,但它也可以与数组一起使用。

关于c++ - 给定一组不同高度的堆栈,我如何选择所有可能的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602910/

相关文章:

c++ - 有没有一种简单的方法来分析头文件并获得所有#defines 的结果列表?

c++ - SIGABRT 在线程中访问内存时

c++ - 如何在嵌套类中重载 << 运算符

javascript - 比较数组元素

c++ - 这个递归函数的运行时间是多少?

C++ boost 日志记录编译错误(linux)

PHP "variable wrapper"作为对多个数据库进行 SQL 查询的数组

java - 从 char 数组获取 char 的索引

c++ - 如何找出两个 vector 之间的角度是外部角度还是内部角度?

algorithm - 如何在没有邻接矩阵的情况下有效地找到图中的连接组件?