次のC#コードがあります:
int[,] mt = { { 5, 4, 6, 2 }, { 8, 1, 5, 4 }, { 2, 3, 8, 6 }, { 9, 6, 1, 8 } };
int i, min, index, j, v;
for (i = 0; i < mt.GetLength(1); i++)
{
index = 0;
min = int.MaxValue;
for (j = 0; j < mt.GetLength(0); j++)
{
v = mt[j, i];
if (v < min)
{ min = mt[j, i]; index = j; }
}
mt[i, index] = mt[i, i]; mt[i, i] = min;
}
for (i = 0; i < mt.GetLength(0); i++)
{//print the matrix after changes
for (j = 0; j < mt.GetLength(1); j++)
Console.Write("{0,3}", mt[i, j]);
Console.WriteLine();
}
Console.ReadLine();
このコードがすべきことは、各列の最小値を、主対角線の同じ列の部分の値に置き換えることです (これは二次行列です)。
したがって、列の最小値を持つセルは、同じ列の主対角線のセルの値を取得し、主対角線のセルは、同じ列の最小値を持つセルの値を取得します。
上記のコードを試しましたが、次の結果が得られました。
{ { 2, 4, 5, 2 }, { 4, 1, 3, 6 }, { 5, 5, 1, 1 }, { 2, 4, 8, 2 } };
そして、これは私が得るべきものです:
{ { 2, 4, 6, 8 }, { 8, 1, 5, 4 }, { 2, 3, 1, 8 }, { 8, 6, 1, 2 } };
私の質問は、理想的な結果を得るためにコードで何を変更すればよいですか?
助けてください、ありがとう!