用二維陣列列印螺旋方陣和螺旋矩陣
————————————————————————————————————————————————————————————————
螺旋方陣,形如:
1 2 3 4 5
1617 1819 6
1524 2520 7
1423 2221 8
1312 1110 9
它是從陣列的第一行開始,順時針旋轉數列,直到陣列中心,
當然,還有並不規則的螺旋矩陣:
1 2 3 4 5 6 7
2021 22232425 8
1932 33343526 9
1831 3029282710
1716 1514131211
對於這樣的陣列,我們從不規則的矩陣入手,把方陣看作是特殊的矩陣。
-------我們可以看到,矩陣中的數字是按照 ”線“ 的方向排列的。“線”在拐彎,數字跟著拐彎。所以,我們從這條會拐彎的“線”入手。
怎樣去找其中的規律呢?
每一行,每一列,貌似都只有一部分有規律。但是如果把有規律的部分劃出來,我們會發現點什麼。
仔細看看,,是不是圖形中的每一塊都有規律了。
當然,如果是不規則矩陣,我們也可以找其中的規律:
規則的螺旋方陣也可以找到這種方法,如圖:
因此,我們就用上圖7*7的矩陣所示的分割方法,把每個要列印的矩陣分成5部分。
第一部分是上邊的三角區域;
第二部分是右邊的三角區域;
第三部分是下邊的三角區域;
第四部分是左邊的三角區域;
第五部分是中間的小區域,當然,如果是偶數行的矩陣,中間的區域就不存在了。
我們發現,數字的“線”就是按照我們所分的區域走的。第一部分、第二部分、第三部分、第四部分、然後迴圈,一、二、三、四,最後可能走到第五部分結束。
而且,第五部分只能從左往右走。
下面分析一下,這個二維陣列程式碼的寫法。
設定每一行為一個length為n的一維陣列,m個一維陣列組成了二維陣列;這樣就形成了 矩陣。
第一部分的二維陣列規則:array[x][y] x不變,y改變。
第二部分的二維陣列規則:array[x][y] y不變,x改變。
第三部分的二維陣列規則:array[x][y] x不變,y倒序改變。
第四部分的二維陣列規則:array[x][y] y不變,x倒序改變。
這條數字“線”,我們定義一個變數key,每一次往數組裡賦值,就讓key自增一次。
OK ! 附上程式碼:
//輸出螺旋距陣。
class Luo
{
public static void main(String [] args)
{
int m=7,n=7; //mn)
arr=new int [n] [m];
else
arr=new int [m] [n];
printArr(arr,m,n);
}
public static void printArr(int [] [] arr,int a,int b) //傳值時,保證了a<=b。
{
int k=1; //定義一個變數,形成數字“線”。
for (int x=0;x=x;y--)
{
arr[a-x-1][y]=k++;
}
/*第四部分:左邊三角區域:
[5][0] , [4][0] , [3][0] , [2][0] , [1][0]
[4][1] , [3][1] , [2][1]
[3][2]
可以總結規律為arr[m-x-2~x+1][x]*/
for (int y=x+1;y
此程式碼可以打印出任意長寬的螺旋矩陣。如果長小於寬,可以自動置換長和寬。
如有問題歡迎大家討論。