蛇形環形矩陣

2022-06-29 21:57:19 字數 1428 閱讀 8527

蛇形環形矩陣是一種從外到裡或者從裡到外環繞的矩陣,就像蛇一樣一圈圈盤旋,由此成為蛇形環繞矩陣, 如下圖就是簡單的從外向裡包圍蛇形環繞矩陣。

列印這種矩陣可以採用分治思想,即將問題分解成子問題求解,每次列印最外一圈,依次向里,直到結束為止。比如上述圖中,最外一層依次從上往下(1 - 4),從左往右(5 - 8),從下往上(9 - 12),從右往左(13 - 16);每次向陣列寫入n-1個數,即每一圈寫入 4 *(n-1)個資料; 然後讓子規模實現下一層的操作,n = n - 2;  假設每一層開始的點都是左上角,即(0,0),(1,1),(2,2)...... 等,是從對角線開始的,所以每層的起始標誌是(begin,begin),對於下一子層就是begin = begin + 1; 

同時注意結束條件,即當 n = 1 時,說明矩陣是基數矩陣,最後乙個元素賦值即結束,n = 0 時說明矩陣是偶數矩陣,即結束;

c++源**(使用迴圈和遞迴兩種方式):

#include//

整合大部分標頭檔案

using

namespace

std;

int n[20][20

];void write(int& i, int& k, int &n, int &num)

for(int j=1; j//

從左往右寫入

n[i][k] = ++num;

k++;

}for(int j=1; j//

從下往上寫入

n[i][k] = ++num;

i--;

}for(int j=1; j//

從右往左寫入

n[i][k] = ++num;

k--;

}}void show(int n)

cout

<< endl<

}}void snakematrix1(int n)

write(i, k, n, num);

n -= 2

; begin ++;

}printf(

"\n使用迴圈列印%d階蛇形矩陣: \n

", temp);

show(temp);

}void snakem(int n, int begin, int num)

if(n == 0)

write(i, k, n, num);

snakem(n-2, begin+1,num); //

帶入遞迴

}void snakematrix2(int n)

void

solve()

intmain()

螺旋矩陣 蛇形矩陣

問題描述 給定乙個包含m行n列的m x n矩陣,程式設計按照螺旋順序,輸出該矩陣中的所有元素。輸入有多個矩陣。每個矩陣資料的第1行有兩個整數m和n,接著是乙個mxn矩陣的描述,有m行,每行有n個整數 輸出對每個矩陣資料,按照螺旋順序輸出矩陣陣列的元素。輸入樣例 3 31 2 3 4 5 6 7 8 ...

1160 蛇形矩陣

時間限制 1 s 空間限制 128000 kb 題目等級 silver 題解 小明玩乙個數字遊戲,取個n行n列數字矩陣 其中n為不超過100的奇數 數字的填補方法為 在矩陣中心從1開始以逆時針方向繞行,逐圈擴大,直到n行n列填滿數字,請輸出該n行n列正方形矩陣以及其的對角線數字之和.輸入描述 inp...

1160蛇形矩陣

解題思路 從最後乙個數n n,從右邊往左邊模擬,即n n存放在二維陣列a x y 裡,n n 1存放在a x y 1 直到y i i i,2,n 1 等於1,這個方向模擬完畢,類似的,再從下往上模擬,再從左往右模擬,再從上往下模擬,順時針模擬,直到n n i i 1,2,n n 1 等於1.其中要注...