首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

蛇形矩阵的java兑现

2012-12-26 
蛇形矩阵的java实现题目:计算并输出 nXn 的蛇形矩阵。(n0)例如 4X4 的蛇形矩阵如下:1?? 3?? 4? 102?? 5??

蛇形矩阵的java实现

题目:

计算并输出 nXn 的蛇形矩阵。(n>0)
例如 4X4 的蛇形矩阵如下:
1?? 3?? 4? 10
2?? 5?? 9? 11
6?? 8??12? 15
7? 13??14? 16

?

类似于前面的输出螺旋矩阵的方法,每一次在数组中填写新的数字都有一个方向,与输出螺旋数组不同的是不是简单的上下左右四个方向,这里涉及到右,下,右上,左下四个方向,针对每步操作都需要想好对应的处理方法,如:

1)向右上位置填写元素的时候可能会碰到行<0或者是列>=N,如果行小于0,那么接下来就需要向右填写元素,列大于等于N,那么很明显接下来就要向下填写元素。

2)向下添加元素时,也会碰到一些情况,例如行>=N了,表示添加到最后一行了,此时需要向右移动,另外在第一列和最后一列向下添加元素情况也不一样,在第一列向下添加元素后,接下来应该向右上添加元素,在最后一列向下添加元素后接下来应该向左下添加元素。

向左下和向右填写元素与这类似。

参加下面的代码(代码来自于http://blog.csdn.net/Mailbomb/archive/2008/07/05/2613736.aspx)

?

public static void main(String[] args) {/**2、计算并输出nXn的蛇形矩阵。(n>0)* 例如4X4的蛇形矩阵如下:* 1  3  4 10                                  * 2  5  9 11                                  * 6  8 12 15                                  * 7 13 14 16 */ //DOWN UPRIGHT RIGHT LEFTDOWNint n=5;int[][] data = new int[n][n];int dire; //当前数字的移动方向final int UPRIGHT = 0; //上右final int DOWN = 1; // 下final int LEFTDOWN= 2; //左下final int RIGHT = 3;// 右dire = DOWN;int value = 1; //数组元素的值int row = 0; //第一维下标int col = 0; //第二维下标data[0][0] = 1; //初始化第一个元素 data[n-1][n-1] = n*n;while(value < n * n-1){System.out.print("("+dire+")");switch(dire){case DOWN://DOWN -UPRIGHT +RIGHT -LEFTDOWNrow++; //移动到下一行if(row>=n){ //超过边界row--; //后退dire = RIGHT;continue; //跳过该次循环}else {value++; //数值增加1data[row][col] = value;//赋值if(col==0) { dire = UPRIGHT; }else if(col==n-1){ dire = LEFTDOWN; }} break;case UPRIGHT://+DOWN -UPRIGHT +RIGHT LEFTDOWNrow--;col++; //移动到上一行,右一列if(col>=n)//超过边界{row++;col--; //后退dire = DOWN;continue; //跳过该次循环}else if(row<0){ //超过边界row++;col--; //后退dire = RIGHT; continue; //跳过该次循环 } else {value++; //数值增加1data[row][col] = value;//赋值dire = UPRIGHT;}break;case RIGHT://+DOWN -UPRIGHT RIGHT -LEFTDOWNcol++; //移动到右一列if(col>=n){ col--; //后退dire = DOWN;continue; //跳过该次循环}else {value++; //数值增加1data[row][col] = value;//赋值if(row==0) { dire = LEFTDOWN; }else if(row==n-1){ dire = UPRIGHT; }}break;case LEFTDOWN://+DOWN UPRIGHT +RIGHT -LEFTDOWNrow++;col--; //移动到下一行,左一列if(row>=n) { //超过边界row--;col++; //后退dire = RIGHT;continue; //跳过该次循环}else if(col<0)//超过边界{row--;col++; //后退dire = DOWN;continue; //跳过该次循环}else {value++; //数值增加1data[row][col] = value;//赋值dire = LEFTDOWN;}break;}}System.out.println();//输出数组中的元素for(int i = 0;i < data.length;i++){for(int j = 0;j < data[i].length;j++){if(data[i][j] < 10){//右对齐System.out.print(' ');}System.out.print(data[i][j]);System.out.print(' ');    }   System.out.println();}

?

?

热点排行