在索引 0 为 0 的数组中查找非零最小值 C++

Posted

技术标签:

【中文标题】在索引 0 为 0 的数组中查找非零最小值 C++【英文标题】:Finding Nonzero Minimum in an Array where index 0 is 0 C++ 【发布时间】:2020-02-21 22:18:39 【问题描述】:

我正在为我的计算机科学课做一个项目,但它要求我在二维数组行中找到最小值,然后返回列的索引,然后接下来搜索具有该列索引的行。我目前正试图让它正确找到所有分钟。我现在拥有的函数为除以零开头的第一行之外的所有行找到正确的最小值。这是函数:

int ComputeLowestPheromone(int matrix[][SIZE], int visitedColns[], int currRow)

    int row_min[SIZE];
    for(int i = currRow; i < SIZE; ++i)
    
        row_min[i] = matrix[i][0];
        for(int j = 0; j < SIZE; ++j)
        
            if(matrix[i][j] == 0)
            
                continue;
            

            if(row_min[i] > matrix[i][j])
            
                row_min[i] = matrix[i][j];
            
        
    

    for(int i = 0; i < SIZE; ++i)
    
        cout  << "Row Min " << i << ": " << row_min[i] << endl;
    

当前输出:CurrentOutput

所以我的问题是,为什么它正确地忽略除第一行以外的所有行的零?一旦我解决了这个问题,关于如何正确保存当前索引的提示会很棒。

【问题讨论】:

1) 请提供minimal reproducible example。 2)请复制粘贴文本,而不是提供它的图片(我说的是你输出的图片)。 您的函数中未使用visitedColns 参数。你能举例说明你的函数应该如何被调用吗?您可以返回当前索引(顺便说一下,您的函数不返回任何内容但具有整数返回类型)。 【参考方案1】:

更改您的初始化
row_min[i] = matrix[i][0];

row_min[i] = std::numeric_limits<int>::max();

【讨论】:

【参考方案2】:

row_min 的分配导致了问题:

row_min[i] = matrix[i][0];

您正在将其初始化为大概为零的值。

if(row_min[i] > matrix[i][j])

    row_min[i] = matrix[i][j];

虽然您通常使用 continue 来避免 0 分配,但您已经将值分配给 0,并且此 if 语句将不会运行。 将 row_min 初始化为 row_min[i] = 0xffffffffstd::numeric_limits&lt;int&gt;::max(); 0xffffffff 假设为 32 位整数。

【讨论】:

谢谢!是的,这就是我的假设,我只是不知道 std::numeric_limits::max();在 cppreference 上阅读后,我明白了。感谢您的提示。

以上是关于在索引 0 为 0 的数组中查找非零最小值 C++的主要内容,如果未能解决你的问题,请参考以下文章

在Python中查找给定数组中最小值的索引

从 C++ 中的字节数组中提取非零索引的最快方法是啥

Kotlin - 在索引范围内的 IntArray 中查找最小值

获取列及其索引的非零最小值

C++ Vector容器查找最大值,最小值以及相应的索引位置

matlab中怎么查找一个向量中第一个非零元素的位置 如P=[0;1;2] 第一个非零元素的位置为2,在mbtlab中怎么