列印旋轉矩陣

2022-09-02 01:27:08 字數 1161 閱讀 4649

給定乙個整形矩陣matrix,請按照旋轉的方式列印它

例如:1  2  3  4

5  6  7  8

9    10   11   12

13     14     15      16

列印結果為:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

本題在演算法上沒有難度,關鍵在於設計一種邏輯容易理解、**易於實現的轉圈遍歷方式。這裡介紹這樣一種矩陣處理方式,該方式不僅可用於這道題,還適合很多其他的面試題,就是矩陣分圈處理。在矩陣中用左上角的座標(tr,tc)和右下角的座標(dr,dc)就可以表示乙個子矩陣,比如,題目中的矩陣,當(tr,tc)=(0,0)、(dr,dc)=(3,3)時,表示的子矩陣就是整個矩陣,那麼這個子矩陣最外層的部分如下:12

3458

9121314

1516

如果能把這個子矩陣的外層轉圈列印出來,那麼在(tr,tc)=(0,0)、(dr,dc)=(3,3)時,列印的結果為:1,2,3,4,8,12,16,15,14,13,9,5。接下來令 tr 和 tc 加 1,即(tr,tc)=(1,1), 令 dr 和 dc 減 1,即(dr,dc)=(2,2),此時表示的子矩陣如下:

6     7

10    11

再把這個子矩陣轉圈列印出來,結果為:6,7,11,10。把 tr 和 tc 加 1,即(tr,tc)=(2,2), 令 dr 和 dc 減 1,即(dr,dc)=(1,1)。如果發現左上角座標跑到了右下角座標的右方或下方, 整個過程就停止。已經列印的所有結果連起來就是我們要求的列印結果。具體請參看如下**中的 spiralorderprint 方法,其中 printedge 方法是轉圈列印乙個子矩陣的外層。

#includeusing

namespace

std;

void printcircle(int a[4], int tr, int tc, int dr, int

dc)}

void spiralorderprint(int a[4], int rowcount, int

colcount)

intmain()

; spiralorderprint(&matrix[0], 4, 4

); system(

"pause");

}

列印矩陣 旋轉矩陣 矩陣查詢(c )

2 旋轉正方形矩陣 vector方法 後續更新 3 之列印 後續更新 4 矩陣查詢 後續更新 不能想如何進行座標位置變換到下乙個,很難。應該考慮資料狀況,從巨集觀上進行分解。若傳入陣列為二維 int a,且不能確定長和寬。way1 下面方法也能獲取長度 1 int lines sizeof a si...

推到 旋轉矩陣公式 旋轉矩陣公式推導

1.在二維平面中 如下圖所示,在xoyxoy平面中有一向量op x,y top x,y t,旋轉 角後變為向量op x y top x y t。據圖可得 x op cos y op sin x op cos y op sin 經旋轉 角後有 x op cos op cos cos sin sin x...

旋轉矩陣演算法

question 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 void func int n 要求 通過傳入的n,輸出乙個4 4的矩陣,順序如上圖所示.code nxn矩陣 include using namespace std include define max...