蛇形矩陣求解
public class SnakeMatrix {
/**
* @param args
*/
public static void main(String[] args) {
snakeMatrix(2,4);
snakeMatrix(4,4);
snakeMatrix(10,1);
snakeMatrix(1,10);
}
// 將矩陣當作是一條條從右上到左下或者從左下到右上的對角線,
// 根據對角線越界判斷是否填充,依次按對角線方向填充數值。
// 例如 4 x 4蛇形矩陣
// 1 3- 4 10
// | / / / |
// 2 5 9 11
// / / /
// 6 8 12 15
// | / / / |
// 7 13 - 14 16
public static void snakeMatrix(int m,int n){
if(m<=0||n<=0)
return;
int[][] array=newint[m][n];
int c=0;
int size=m+n;//對角線總的數目,大於最長對角線填充個數,保證邊界判斷後可以完全填充
for(int i=0;i<size;i++){
int mm,nn;
if(i%2==0){
// 偶數爲右上到左下方向填充對角線
// 起始點爲橫座標點
mm=0;
nn=i;
for(int j=0;j<size;j++){
// 邊界判斷
if(mm>=0&&mm<m&&nn>=0&&nn<n)
array[mm][nn]=++c;
// 右上到左下方向
mm++;
nn--;
}
}else{
// 奇數爲左下到右上方向填充對角線
// 起始點爲縱座標點
mm=i;
nn=0;
for(int j=0;j<size;j++){
if(mm>=0&&mm<m&&nn>=0&&nn<n)
array[mm][nn]=++c;
// 左下到右上
mm--;
nn++;
}
}
}
// 輸出
System.out.println("************************");
System.out.println("SnakeMatrix:\t"+m+" x "+n);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++)
System.out.print(array[i][j]+" ");
System.out.println();
}
System.out.println("************************");
}
}
下載地址:
http://download.csdn.net/detail/ssuchange/6720721