几个小时前我提出了一个问题,但是在完成我对该问题提出的问题后,我对自己必须做的事情感到一团糟。人们给我的所有解决方案都还可以,但是对于我真正想要的东西没有用,因为我没有写出必须的问题。我必须保存一个值的重要位置,没有必要保存在另一个问题上来解决问题。所以这里是正确的。
(一切都用上面的例子解释,理解起来很容易)我有一个 8x8 矩阵,在选择我想要的行之后,我想得到它的三个最小元素,并随机选择这三个中的一个。然后,删除包含此数字的行和列。问题是我不知道如何处理这三个元素并删除列/行。我只知道如何获得最小元素,即以下代码。
int pieza[ROWS][COLS] = {
0, 2, 2, 5, 3, 2, 1, 1,
0, 4, 5, 2, 4, 3, 0, 0,
0, 4, 2, 2, 1, 2, 3, 2,
0, 3, 1, 5, 1, 2, 3, 4,
2, 5, 6, 5, 3, 1, 2, 7,
8, 2, 0, 0, 0, 2, 1, 1,
1, 2, 2, 1, 1, 6, 3, 4,
0, 1, 3, 2, 0, 0, 0, 0,
};
int myrow = 3; // the row I want to analyze
int index;
int min=0;
for (index=0;index<8;index++) {
printf("%d", piezas[myrow][index] );
if(piezas[myrow][index]<min)
min=piezas[myrow][index];
printf("\t\t");
}
printf("min: %d", min);
这就是我想做的。如果初始矩阵是(始终是nxn
矩阵):
{
0, 2, 2, 5, 3, 2, 1, 1,
0, 4, 5, 2, 4, 3, 0, 0,
0, 4, 2, 2, 1, 2, 3, 2,
0, 3, 1, 5, 1, 2, 3, 4,
2, 5, 6, 5, 3, 1, 2, 7,
8, 2, 0, 0, 0, 2, 1, 1,
1, 2, 2, 1, 1, 6, 3, 4,
0, 1, 3, 2, 0, 0, 0, 0,
};
我选择第 3 行:
0, 3, 1, 5, 1, 2, 3, 4,
该算法必须选择该行的三个最小元素。
0, 1, 1
并随机选择这三个之一。例如,如果它选择第一个“一个”......
0, **1**, 1
...算法必须转到该行的第 3 列(因为那是 '1' 的位置)并删除行和列,因此输出矩阵将如下所示,比原始矩阵少一维(因为您已经删除了一行和一列):
{
0, 2, 5, 3, 2, 1, 1,
0, 4, 2, 4, 3, 0, 0,
0, 4, 2, 1, 2, 3, 2,
2, 5, 5, 3, 1, 2, 7,
8, 2, 0, 0, 2, 1, 1,
1, 2, 1, 1, 6, 3, 4,
0, 1, 2, 0, 0, 0, 0,
};
我只知道如何到达线路,但我在处理三个最小值时遇到了问题,因为我有大量的问题指针,而且我对 C 的了解不多。
提前致谢