这里我在C
中找到2维矩阵中最小的3个元素时遇到了一些问题这是我的代码:
for (i=0; i<r; i++) {
for (j=0; j<c; j++) {
if (m[i][j] < min1) {
min1 = m[i][j];
indexi_1 = i;
indexj_1 = j;
}
if (m[i][j] < min2 && indexi_1 != i && indexj_1 != j) {
min2 = m[i][j];
indexi_2 = i;
indexj_2 = j;
}
}
for (j=0; j<c; j++) {
if (m[i][j] < min3 && m[i][j] != m[indexi_1][indexj_1] && m[i][j] != m[indexi_2][indexj_2]) {
min3 = m[i][j];
indexi_3 = i;
indexj_3 = j;
}
}
}
有这样的矩阵
int m[r][c] = {{33, 4, 23, 2}, {5, 3, 24, 16}, {8, 31, 7, 4},{10, 5, 2, 6}};
获得此输出:
Local minimum (value=2) - row=0, column=3.
Local minimum (value=2) - row=3, column=2.
Local minimum (value=4) - row=0, column=1.
正如你在这里看到的那样,问题只出现在最后一个min元素中,我认为它因为索引而倾覆。
答案 0 :(得分:0)
下面:
if (m[i][j] < min3 &&
m[i][j] != m[indexi_1][indexj_1] &&
m[i][j] != m[indexi_2][indexj_2])
您比较值而不是索引。
答案 1 :(得分:0)
您将第三个最小值与 temporary min1
和min2
的值进行比较。您必须在外部for
循环
for (i=0; i<r; i++) {
for (j=0; j<c; j++) {
if (m[i][j] < min1) {
min1 = m[i][j];
indexi_1 = i;
indexj_1 = j;
}
if (m[i][j] < min2 && indexi_1 != i && indexj_1 != j) {
min2 = m[i][j];
indexi_2 = i;
indexj_2 = j;
}
}
}
for (i=0; i<r; i++) {
for (j=0; j<c; j++) {
if (m[i][j] < min3 && m[i][j] != m[indexi_1][indexj_1] && m[i][j] != m[indexi_2][indexj_2]) {
min3 = m[i][j];
indexi_3 = i;
indexj_3 = j;
}
}
}
现在最后一个循环将与最后的前两个最小值进行比较。
答案 2 :(得分:0)
更改此行
if (m[i][j] < min3 && m[i][j] != m[indexi_1][indexj_1] && m[i][j] != m[indexi_2][indexj_2])
到
if (m[i][j] < min3 && (indexi_1 != i && indexj_1 != j) && (indexi_2 != i && indexj_2 != j))