【发布时间】:2013-05-07 09:19:47
【问题描述】:
几个小时前我创建了a question,但在完成我在该问题上提出的问题后,我对自己必须做的事情感到一团糟。人们给我的所有解决方案都还可以,但对于我真正想要的东西没有用,因为我没有写出必须的问题。我必须保存一个值的重要位置,没有必要保存在另一个问题上来解决问题。所以这是正确的。
(上面的例子解释了一切,理解起来很容易)我有一个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。
提前致谢
【问题讨论】:
-
你的最终矩阵(期望的输出)没有意义,你不能有一个声明为
[8][8]的矩阵,而只是为一个 7x7 矩阵提供初始化器。您在 7 个元素之后放置换行符这一事实对 C 编译器没有任何意义,它会给您一个 8x8 矩阵,因为这就是您所要求的。 -
我的错。如果您给出
nxn矩阵,则输出矩阵必须是n-1 x n-1矩阵。少一维。帖子正在编辑中。