2

次の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 } };

私の質問は、理想的な結果を得るためにコードで何を変更すればよいですか?

助けてください、ありがとう!

4

1 に答える 1

7

あなたは書いたはずです:

mt[index, i] = mt[i, i]; 

それ以外の:

mt[i, index] = mt[i, i];
于 2013-05-26T16:15:58.347 に答える