gpt4 book ai didi

c - 取相邻小区的最小值

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

我正在尝试编写一个函数,它接收一些矩阵[N][M](N和M在开头定义,它们总是3),两个整数并返回相邻单元格的最小值(水平、垂直和对角线)到特定的 (y,x) 单元格(该函数是采用特定 (y,x) 而不是任何 (y,x) 的较大代码的一部分。在某些特定情况下会调用它) 在二维数组中 - 最小值(int mat[N][M], int y, int x)。

例如,我有一个 2D 数组,并且我正在专门查看 0,0 元素

1 10 9

18 9 10

19 10 8

我希望该单元格更改为 9,因为它是相邻单元格的最小值(单元格本身是否是所有单元格中的最小值并不重要),因此数组变为

9 10 9

18 9 10

19 10 8

我尝试过的:首先我检查了每个相邻的单元格。之后,我主要尝试将相邻单元格的值存储在其他变量中

tmp=mat[y+i][x+j]

每次迭代都会发生变化,然后在其后添加一些 if 条件,将最小值传入 mat[y][x]=mat[y+i][x+j] 单元格。我尝试了很多条件,但没有一个起作用。

我想到并尝试实现的另一件事是添加一个一维数组来存储所有相邻单元格的值(如果小于数组的大小 - 存储 0),然后检查每两个单元格之间的最小值不包括 0。代码被打乱了,我迷失了在哪里放置该数组的循环。

我通过以下方式检查了某些特定 y,x 单元格的相邻单元格:

Min(int mat[N][M], int y, int x)
{
for(i=-1;i<=1;i++)
{
if((y+i>=0) && (y+i<=N))
{
for(j=-1;j<=1;j++)
{
if((x+j>=0) && (x+j<=M))
{
if((x+i != 0) && (y+j != 0))
{
/*CONDITION TO TAKE MINIMUM*/
}
}
}
}
}
}

任何帮助将不胜感激。

最佳答案

1) matr[N][M]它没有像 matr[?][M] 这样的元素和matr[N][?]因为计数是从0开始的至N-1 (或M-1)。所以你应该改变条件y+i<=Ny+i<Nx+j<=Mx+j<M .

2) 检查您是否没有在查看单元格 [y][x]您应该检查 if(!(i == 0 && j == 0)) 本身或者,等效的if(i != 0 || j != 0)而不是if(x+i != 0 && y+j != 0)

3)首先要找到最小值 int min = INT_MAX;在函数的开头。 取最小值的条件

if (mat[y+i][x+j] < min)
min = mat[y+i][x+j];

4) 将最小值写入单元格 [y][x] ,使用matr[y][x] = Min(matr, y, x);在主函数或你想要的地方

<小时/>

或者,您可以遍历所有可能的单元格 [i][j]这样的方式:

int u = max(0, y - 1), d = min(y + 1, N - 1);
int l = max(0, x - 1), r = min(x + 1, M - 1);
for (i = d; i <= u; i++)
for (j = l; j <= r; j++)
if (i != y || j != x)
if (mat[i][j] < min)
min = mat[i][j];
return min;

关于c - 取相邻小区的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41600749/

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