私は数時間前に質問をしましたが、その質問で尋ねていたことを終えた後、何をしなければならなかったかについて混乱しています. 人々が私にくれたすべての解決策は問題ありませんでしたが、質問を本来あるべきように書いていなかったため、私が本当に探していたものには役に立ちませんでした。値の重要な位置を保存する必要がありましたが、問題を解決するために他の質問で保存する必要はありませんでした。だからここに適切なものがあります。
(すべては上記の例で説明されており、理解するのは簡単です) 私は 8x8 行列を持っており、必要な行を選択した後、その 3 つの最小要素を取得し、この 3 つのうちの 1 つをランダムに選択したいと考えています。次に、この数値を含む行と列を削除します。問題は、これらの 3 つの要素を処理して列/行を削除する方法がわからないことです。最小要素を取得する方法を知っているだけです。それは次のコードです。
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,
アルゴリズムは、その行の 3 つの最小要素を選択する必要があります。
0, 1, 1
そして、この3つからランダムに1つを選びます。たとえば、最初の「1」を選択すると...
0, **1**, 1
... アルゴリズムはその行の 3 番目の列に移動し (これが「1」の位置だったため)、行と列を削除する必要があるため、出力マトリックスは次のようになり、元のマトリックスよりも 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にあまり詳しくないため、3つの最小値を処理するのに問題があります。
よろしくお願いします