gpt4 book ai didi

c - 如何通过检查周围的所有数字是否都小于它来查找局部最大值来遍历二维数组?

转载 作者:行者123 更新时间:2023-11-30 18:45:30 26 4
gpt4 key购买 nike

如何通过检查周围的所有数字是否都小于局部最大值来遍历二维数组?我真的很困惑如何在代码中做到这一点。我需要获取位置,并且只需要局部最大值,而不是绝对最大值。

void reportMaxima(int rows, int cols, int grid[ rows ][ cols ])
{

}

最佳答案

这应该有效:

#include <stdbool.h>
#include <string.h>

void report_maxima(int rows, int cols, int arr_in[rows][cols],
bool arr_out[rows][cols])
{
int i, j;
int k, l;

memset(arr_out, 0, rows * cols * sizeof(arr_out[0][0]));
// memset(arr_out, 0, sizeof(arr_out)); I think this doesn't work :(

for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
for (k = i - 1; k <= (i + 1); k++) {
if (k < 0)
continue;
if (k >= rows)
break;

for (l = j - 1; l <= (j + 1); l++) {
if (l < 0)
continue;
if (l >= cols)
break;

if (arr_in[i][j] < arr_in[k][l])
goto not_maxima;
}
}

arr_out[i][j] = true;
continue;

not_maxima:
}
}
}

首先,您需要一个 bool 数组来存储输出信息:某个点是否是最大值 (true) 或不是 (false) )。

您需要先将该数组初始化为 0 (false),然后再将点存储在 true 的位置。最好的方法是使用 memset()

然后,显然您需要迭代输入数组。 (ij 执行此操作)

对于输入数组的每个点,您检查所有邻居。 (kl 就是这样做的)。您需要确保您尝试访问的邻居位于数组边界内(if - continueif -break 可以做到这一点)。

然后,您检查所有这些邻居是否都小于您所在的点。您找到的第一个大于您的点的邻居告诉您,您不在局部最大值中,您应该跳到下一个点。如果在检查所有邻居后,您没有找到任何大于您的点的邻居,那么您就处于局部最大值。 (或至少在拐点处)

最后一件事很重要:如果你想确定,你应该添加大量检查,这会大大减慢算法速度。这取决于您的需求。

编辑:

修复了 sizeof() 使用不正确输入时的错误。

关于c - 如何通过检查周围的所有数字是否都小于它来查找局部最大值来遍历二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54504794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com