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

Finding Nonzero Minimum in an Array where index 0 is 0 C++

本文关键字:最小值 查找 C++ 数组 索引      更新时间:2023-10-16

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

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

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

从更改初始化

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

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

row_min的分配导致了问题:

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

您正在将其初始化为一个零值。

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

尽管您通常使用continue来避免0赋值,但您已经将值赋给了0,并且this if语句将不会运行。将row_min初始化为row_min[i] = 0xffffffffstd::numeric_limits<int>::max();0xffffffff假设32位内部