1

N*Nアレイを90度回転させるソリューションを理解しようとしています。これは、以前に尋ねられたが現在は閉じられている質問への参照です-[リンク]余分なスペースを使用せずにマトリックスを90度回転させる方法は? 最高の投票の答えはかなりきちんと見えますが、私はそれを十分に理解することができません誰かがこれらのステップを説明することができます

4

1 に答える 1

1

1つの式で4つの要素すべてを一度にスワップできるため、Pythonでは不要なXORスワップトリックを使用しています。

def rot2(a):
    n = len(a)
    for x in range((n + 1) / 2):
        for y in range(n / 2):
            a[x][y], a[n-1-y][x], a[y][n-1-x], a[n-1-x][n-1-y] = (
                                                      a[y][n-1-x],
                                                      a[x][y], 
                                                      a[n-1-x][n-1-y],
                                                      a[n-1-y][x],
                                                 )

 

N×N行列、N = 3:

1 2 3
4 5 6
7 8 9

N / 2 = 1(N + 1)/2 = 2

x = [0, 2)(0または1)、y = [0, 1)(0)。

コーナー:

 1 2 | 3
_____|
 4 5   6
 7 8   9

スワップ:1 ← 3 ← 7 ← 9 (← 1);2 ← 6 ← 8 ← 4 (← 2)

 

5×5マトリックス:

a b c d e
f g h i j
k l m n o
p q r s t
u v w x y

N / 2 = 2(N + 1)/2 = 3

x = [0, 3)(0または1または2)、y = [0, 2)(0または1)。

コーナー:

a b c | d e
f g h | i j
______|
k l m   n o
p q r   s t
u v w   x y

スワップ:

a ← e ← y ← u
f ← d ← t ← v
b ← j ← x ← p
g ← i ← s ← q
c ← o ← w ← k
h ← n ← r ← l
于 2013-03-26T18:51:03.757 に答える