はじめに

二次元配列、または行列を回転させることは、プログラミングにおいて一般的な問題であり、特にコンピュータグラフィックスやデータ操作のさまざまなアプリケーションで発生します。このブログ記事では、4x4行列を90度時計回りに回転させるプロセスに深く没頭します。

問題の理解

以下のように構成された二次元配列があると仮定します:

[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]

この行列を90度時計回りに回転させると、次のように変化するはずです:

[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]

実際には、元の配列の各要素が回転に基づいて新しい位置にシフトします。しかし、これをC#のようなプログラミング言語でどう実装するのでしょうか?ステップバイステップで解説していきましょう。

解決策

ステップ1: 行列の初期化

まず、プログラム内で行列を初期化する必要があります。以下のように実行できます:

int[,] array = new int[4,4] {
    { 1,2,3,4 },
    { 5,6,7,8 },
    { 9,0,1,2 },
    { 3,4,5,6 }
};

ステップ2: 行列を回転させる関数の作成

次に、回転を行うRotateMatrixという関数を作成します。この関数は元の行列とそのサイズをパラメータとして受け取り、回転した行列を返します。

以下はRotateMatrix関数の実装です:

static int[,] RotateMatrix(int[,] matrix, int n) {
    int[,] ret = new int[n, n];

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            ret[i, j] = matrix[n - j - 1, i];
        }
    }

    return ret;
}

ステップ3: 関数の説明

  • 行列の宣言: 入力と同じサイズの新しい行列retを宣言します。
  • ネストされたループ: ネストされたループを使用して行列の各要素を走査します。
  • 回転ロジック: 各要素の位置(i, j)から新しい位置(j, n - i - 1)にマッピングします。この公式により、要素を90度時計回りに正しく回転させることができます。

ステップ4: 関数のテスト

関数を呼び出して回転した行列を出力することで、テストできます:

int[,] rotated = RotateMatrix(array, 4);

確認のためにマトリックスを印刷するメソッドを実装することを忘れないでください。

結論

二次元配列を回転させることは、インデックスのマッピングを理解すれば簡単な作業です。現在のアプローチはO(n^2)の時間計算量で実行されますが、より大きな行列(例えば10000x10000)のためのアルゴリズムの最適化は、アルゴリズムおよびデータ構造のongoingな議論です。

これで、C#で任意の二次元配列を自信を持って回転させることができます。コーディングを楽しんでください!