蛇形環形矩陣是一種從外到裡或者從裡到外環繞的矩陣,就像蛇一樣一圈圈盤旋,由此成為蛇形環繞矩陣, 如下圖就是簡單的從外向裡包圍蛇形環繞矩陣。
列印這種矩陣可以採用分治思想,即將問題分解成子問題求解,每次列印最外一圈,依次向里,直到結束為止。比如上述圖中,最外一層依次從上往下(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.其中要注...