2

1次元配列で表される行列を(時計回りに)回転させるためのアルゴリズムが必要です。
これまでのところ、次のリンクを見つけましたが、必要なソリューションに近づくために何も理解できませんでした:http:
//basgun.wordpress.com/2008/04/11/rotate-array/
http:// www.rawkam.com/?p=1008

任意の提案や手がかりは大歓迎です!

Hristo

編集:これが例です
(1 2 3(時計回りに1回転サイクルになります)(7 4 1
 4 5 6 ---------> 8 5 2
 7 8 9)9 6 3)

(7 4 1 (時計回りの回転サイクルは次のようになります)(9 8 7
 8 5 2 ---------> 6 5 4
 9 6 3)3 2 1)

4

3 に答える 3

1

この回答に基づいて、ソリューションを2Dアレイから1Dアレイに変更しました。これはC#で記述されていますが、C風の言語で機能するはずです。

public static int[] Rotate1DSquareMatrixClockwise(int[] matrix)
{
    int size = (int)Math.Sqrt(matrix.Length);
    int[] result = new int[matrix.Length];

    for (int i = 0; i < size; ++i)
    {
        for (int j = 0; j < size; ++j)
        {
            result[i * size + j] = matrix[(size - j - 1) * size + i];
        }
    }

    return result;
}

この答えは正方行列に対してのみ機能します。補足:正方形の2D配列から1D配列として要素にアクセスするには、次のように簡単です。リンクされたソリューションfor matrix NxN: m1[i,j] = m2[i * N + j]で変更したのはこれだけです。

于 2016-08-15T23:30:21.873 に答える
0

ウィキペディアには、「行列の時計回りの回転」に関するすばらしい記事があります(インプレース行列転置->アルゴリズム) 。

どの言語を使用するかは言いませんでしたが、この場合、Cに似た言語は、「1次元配列で表される行列」にアクセスするための優れた方法です。

于 2010-11-27T17:50:25.853 に答える
0

簡単です

時計を賢く回転させる手順

1.行列の転置を行う

2.列を入れ替える

/*a is the given matrix , b is the output matrix ,n is the size of the matrix*/
System.out.println("Transpose of given matrix\n");
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
              b[i][j]=a[j][i];
            }
        }

        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                System.out.print(b[i][j]+"\t");
            }
            System.out.println("\n");
        }

        System.out.println("Clockwise Rotation of given matrix\n");

        for(i=0;i<n/2;i++)
        {
            for(j=0;j<n;j++)
            {

                sw=b[j][i];
                b[j][i]=b[j][n-1-i];
                b[j][n-1-i]=sw;
            }
            System.out.println("\n");
        }


        //Print the Result 
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                System.out.print(b[i][j]+"\t");
            }
            System.out.println("\n");
        }

テストされ、うまく機能しました

于 2017-03-07T11:07:10.157 に答える