螺旋数组的java实现
螺旋数组要求:存储和输出nXm的螺旋数组,其中n和m为大于0的整数。???????? int n = 4; int m = 5; int[][] data = new int[n][m]; int dire; //当前数字的移动方向 final int UP = 0; //上 final int DOWN = 1; //下 final int LEFT = 2; //左 final int RIGHT = 3;//右 dire = RIGHT; int value = 1; //数组元素的值 int row = 0; //第一维下标 int col = 0; //第二维下标 data[0][0] = 1; //初始化第一个元素 while(value < n * m){ switch(dire){ case UP: row--; //移动到上一行 if(row < 0){ //超过边界 row++; //后退 dire = RIGHT; continue; //跳过该次循环 }else if(data[row][col] != 0){//已赋值 row++; //后退 dire = RIGHT; continue; //跳过该次循环 } break; case DOWN: row++; //移动到下一行 if(row >= n){ //超过边界 row--; //后退 dire = LEFT; continue; //跳过该次循环 }else if(data[row][col] != 0){//已赋值 row--; //后退 dire = LEFT; continue; //跳过该次循环 } break; case LEFT: col--; //移动到前一列 if(col < 0){ //超过边界 col++; //后退 dire = UP; continue; //跳过该次循环 }else if(data[row][col] != 0){//已赋值 col++; //后退 dire = UP; continue; //跳过该次循环 } break; case RIGHT: col++; //移动到后一行 if(col >= m){ //超过边界 col--; //后退 dire = DOWN; continue; //跳过该次循环 }else if(data[row][col] != 0){//已赋值 col--; //后退 dire = DOWN; continue; //跳过该次循环 } break; } value++; //数值增加1 data[row][col] = value;//赋值 } //输出数组中的元素 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(); }?
???????????????????????????在该代码中dire代表当前元素的移动方向,每个根据该变量的值实现移动,如果移动时超出边界或移动到的位置已赋值,则改变方向,并跳过本次循环,如果移动成功,则数值增加1,对数组元素进行赋值。?
转自:http://blog.csdn.net/Mailbomb/archive/2008/07/05/2613259.aspx