【问题标题】:3 argument minimum comparison issue c++ [duplicate]3个参数最小比较问题c ++ [重复]
【发布时间】:2021-02-04 18:04:17
【问题描述】:

我试图找到一个数组的最小成本路径。该代码在限制为向下或向右移动时有效,但不能沿对角线移动。

问题:

return min(findMinCost( cost, m - 1, n), 
           findMinCost(cost, m, n - 1), 
           findMinCost(cost, m - 1, n - 1)) + cost[m - 1][n - 1];

我为对角线运动添加了第三个参数,但似乎我无法使用 min 比较 3 个参数。进行这种比较的最简单方法是什么? 谢谢!

【问题讨论】:

    标签: c++


    【解决方案1】:

    在 c++ 中,min 可以接受 2 个参数。你应该像这样计算最小值,

    return min(
              min(findMinCost( cost, m - 1, n), 
                  findMinCost(cost, m, n - 1)), 
                  findMinCost(cost, m - 1, n - 1)) + cost[m - 1][n - 1];
    

    这样,您首先会找到findMinCost( cost, m - 1, n)findMinCost(cost, m, n - 1) 之间的最小值。然后找到第一个最小值和findMinCost(cost, m - 1, n - 1)中的最小值。就像你想找到最少的a,b,c

    int x = min(a, b);
    int min = min(x, c);
    

    【讨论】:

    • 实际上,min 可以获取整个值列表,而不仅仅是两个值。
    • 是的,如果我们传递一个值列表。但是我们不能为 min 函数传递超过 2 个参数。我的意思是min(integerList, compFunc) 是可能的。但是如果不重载 min 函数,min(a,b,c,d,...) 是不可能的。如果我遗漏了什么,请随时纠正我。谢谢。
    • @sabbir.alam std::min() (4) 特别是。
    • 是的,但您仍然可以在函数中传递 2 个参数。其中之一是数字列表。但是你不能传递超过2个参数,对吧?
    • 第一个参数可以是初始化列表。所以你上面的例子可以写成std::min({a, b, c, d}) - 这很好,比较器是可选的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多