【发布时间】:2017-01-11 21:10:53
【问题描述】:
我正在尝试编写一个函数,它接收一些矩阵[N][M](N 和 M 在开头定义,它们都始终为 3),两个整数并返回相邻单元格的最小值(水平,垂直和对角线)到特定的(y,x)单元格(该函数是较大代码的一部分,它采用特定的(y,x)而不是任何(y,x)。在某些特定情况下会调用它) 在二维数组中 - 最小值(int mat[N][M], int y, int x)。
例如,我有一个二维数组,我正在专门查看 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*/
}
}
}
}
}
}
非常感谢任何帮助。
【问题讨论】:
-
在通常意义上的
array[N][M]中,y的含义通常是行,x是列,您似乎将索引限制与错误的维度进行比较。我希望y与N相关联,x与M相关联。 -
我可以翻转名称,然后 y 将代表行和 x 列。那没问题。我会更新我的代码。
-
如果矩阵不是方阵,以后有问题了。
-
我更习惯将 xs 视为行。如果更容易理解,我更改了代码。
-
以
int minval = mat[0][0];开头,/*CONDITION TO TAKE MINIMUM*/可以是if(minval > mat[y+j][x+i]) { minval = mat[y+j][x+i];}
标签: c arrays function multidimensional-array