码迷,mamicode.com
首页 > 其他好文 > 详细

Zigzag数组

时间:2014-06-26 11:54:03      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   http   

首先了解下zigzag数组,如下图,由一个矩阵的对角线,数字按一定规律递增

bubuko.com,布布扣


求nxn的Zigzag数组?

代码如下:

/*

0     1     5     6     14    15    27    28
2     4     7     13    16    26    29    42
3     8     12    17    25    30    41    43
9     11    18    24    31    40    44    53
10    19    23    32    39    45    52    54
20    22    33    38    46    51    55    60
21    34    37    47    50    56    59    61
35    36    48    49    57    58    62    63

*/


class Zigzag{
	public static void main(String[] args){
		//int[][] a=nzigzag(8);
		int[][] a=zigzag2(8);
		print(a);
	}
	//解法一:
	public static int[][] nzigzag(int n){
		int[][] a=new int[n][n];
		int count=0; //记录当前应当填充的元素 
		int cross=0;
		//填充左上三角矩阵,包括对角线,按斜线输出,cross表示的是第几条斜线  
    	//对于任意一个元素a[i][j],有i+j = cross  
		for(cross=0;cross<n;cross++){
			//如果填充第偶数条斜线,那么输出的方向是做左下角到右上角,终止的条件是行号i==0,或者列好j==N-1  
			if(cross%2==0){
				for(int row=cross;row>=0;row--){
					a[row][cross-row]=count++;
				}
			}else{ //如果填充第奇数数条斜线,那么输出的方向是做右上角到左下角  
				for(int col=cross;col>=0;col--){
					a[cross-col][col]=count++;
				}
			}
		}
		//填充右下角矩阵,不包括对角线  
		int limit=1; //记录终止的行列号  
		for(cross=n-2;cross>=0;cross--){
			if(cross%2==0){
				for(int row=n-1;row>=limit;row--){
					a[row][limit+n-1-row]=count++;
				}
				limit++;
			}
			else{
				for(int col=n-1;col>=limit;col--){
					a[limit+n-1-col][col]=count++;
				}
				limit++;
			}
		}
		return a;
	} 
	//解法二:
	public static int[][] zigzag2(int n){
		int value=0;
		int num;
		int i,j,k;
		for(i=0;i<n;i++){
			num=0;
			if(i%2==0){
				j=i;
				k=0;
				while(num++<=i){
					a[j--][k++]=value++;
				}
			}else{
				j=0;
				k=i;
				while(num++<=i){
					a[j++][k--]=value++;
				}
			}
		}

		//下三角
		for(i=n-2;i>=0;i--){
			num=0;
			if(i%2==0){
				j=n-1;
				k=n-1-i;
				while(num++<=i){
					a[j--][k++]=value++;
				}
			}else{
				j=n-1-i;
				k=n-1;
				while(num++<=i){
					a[j++][k++]=value++;
				}
			}
		}
		return a;
	}

	public static void print(int[][] a){
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[0].length;j++){
				System.out.print(a[i][j]+" ");
			}
			System.out.println();
		}
	}
}

---EOF---


Zigzag数组,布布扣,bubuko.com

Zigzag数组

标签:style   class   blog   code   java   http   

原文地址:http://blog.csdn.net/navyifanr/article/details/34808389

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!