下面是乙個3*3的矩陣,經過90度旋轉,得到:
123
7414
56 ——>85
2789
963
第 1 種方法:使用輔助陣列
我們只看第1行的旋**
1
23 。。1
。。。 ——> 。。2
。。。 。。3
可以看出第 1 行的元素旋轉後,出現在倒數第 1 列的位置。並且第 1 行的第 x 個元素旋轉後,出現在倒數第 1 列的第 x 個位置。
再來看第 2 行的元素,旋轉後,出現在倒數第 2 列的位置上。
。。。 。4 。45
6 ——> 。5 。
。。。 。6 。
由此我們可以得出:
對於矩陣中第 i 行的第 j 個元素,在旋轉後,它出現在倒數第 i 列的第 j 個位置。翻譯成**為:
matrix [ i ] [ j ] 旋轉後為 matrix [ j ] [ n - i -1 ] (其中 n 為總列數)
#include
void
rotate
(int
** matrix,
int matrixsize)
}for
(i=0
;i}int
main()
,,};
p[0]=
&matrix[0]
[0];
p[1]=matrix[1]
; p[2]
=matrix[2]
;rotate
(p,3);
for(
int i=
0;i<
3;i++
)printf
("\n");
}return0;
}
第 2 種方法:翻轉法
先將其對於水平軸翻轉而言翻轉得到:
123
7894
56 ——>45
6789
123
再將其根據主對角線翻轉得到:
789
7414
56 ——>85
2123
963
從而得到答案。
對於水平軸翻轉而言:
matrix [ i ] [ j ] ——> matrix [ n - i - 1 ] [ j ] (其中 n 為總行數)對於主對角線翻轉而言:
matrix [ i ] [ j ] ——> matrix [ j ] [ i ]由兩式合併得:
matrix [ i ] [ j ] ——> matrix [ j ] [ n - i - 1 ]
#include
void
swap
(int
* a,
int* b)
void
rotate
(int
** matrix,
int matrixsize)
}// 主對角線翻轉
for(
int i =
0; i < matrixsize;
++i)}}
intmain()
,,};
p[0]=
&matrix[0]
[0];
p[1]=matrix[1]
; p[2]
=matrix[2]
;rotate
(p,3);
for(
int i=
0;i<
3;i++
)printf
("\n");
}return0;
}
矩陣的旋轉問題
輸入乙個4 4的矩陣,進行逆時針旋轉90度後輸出,要求原始陣列的資料隨機輸入,新資料以4行4列的方式輸出 可以通過乙個二維陣列實現輸入,然後轉換 i 行為 j 列,第乙個新行數的下標為0即可b 3 j i a i j 如下 示例 include intmain printf array b n fo...
矩陣旋轉問題
題意 蒜頭君的班級裡有 n 2個同學,現在全班同學已經排列成乙個n n 的方陣,但是老師卻臨時給出了一組新的列隊方案,為了方便列隊,所以老師只關注這個方陣中同學的性別,不看具體的人是誰,這裡我們用0表示男生,用1表示女生,現在蒜頭君告訴你同學們已經排好的方陣是什麼樣的,再告訴你老師希望的方陣是什麼樣...
關於旋轉矩陣新的理解
之前理解他一直都記的是他可以用來表示乙個空間中的向量在另乙個空間中的表示,但是為什麼可以這樣?今天思考了一下,結合之前的一片部落格 我有乙個新的想法 我覺得旋轉矩陣理解成乙個空間到另乙個空間的轉換更好,或者理解成乙個座標系到另乙個座標系的轉換,比如地繫到機體系的r就理解成地系到機體系的轉換,那篇部落...