蛇形遍历矩阵 50行JAVA代码实现 欢迎挑刺

来源:互联网 发布:网络的利与弊征文字少 编辑:程序博客网 时间:2024/05/15 01:46

  蛇形排序矩阵的难点在于:

1,遍历时有部分是向下遍历(down),例如  data[i][j] ->data[i+1][j+1]->data[i+2][j+2],但是有时候是向上遍历(up),

   例如data[i][j]->data[i-1][j-1]->data[i-2][j-2];

  Ps: 据此可以写出snakedown()  snakeup()来表示;

  Ps: 对于遍历方向的切换通过两函数之间的调用可以解决;

2,控制后边界条件:

   对于最左data[][0]   最右data[][n-1] 最上data[0][]最下data[n-1][];

   起点data[n-1][0]   终点data[0][n-1]

   左上拐点data[0][0] 右下拐点data[n-1][n-1];

  ps:对于snakedown()向下,判断好最下和最右 ;对于snakeup()向上,判断好最左和最上;

  Ps:  对于两个重要的拐点: 左上在snakeup()中 ,右下在snakedown()中一定要慎重,非常容易出错


public class Snake {

public static void main(String args[]) {
int[][] datas = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
snakeUp(datas, datas[0].length - 1, 0, datas[0].length);
}


public static void snakeUp(int[][] data, int row_id, int col_id, int size) {
int j = col_id;
int i = row_id; // 初始化从 data[n-1][0] 到data[0][n-1]
for (; j > 0 && i > 0; i--, j--) {
System.out.print(data[i][j] + " ");
}
System.out.print(data[i][j] + " ");
System.out.println();


if (i == 0) {
if (j == size - 1)
return;
j++;
}
if (j == 0) {
i--;
}


snakeDown(data, i, j, size);
}


public static void snakeDown(int[][] data, int row_id, int col_id, int size) {
int j = col_id;
int i = row_id; // 初始化从 data[n-1][0] 到data[0][n-1]


for (; j < size - 1 && i < size - 1; i++, j++) {
System.out.print(data[i][j] + " ");
}
System.out.print(data[i][j] + " ");
System.out.println();


if (j == size - 1) {
if (i == 0)
return;
i--;
}
if (i == size - 1) {
j++;
}
snakeUp(data, i, j, size);
}

}


输出结果:

13 
9 14 
15 10 5 
1 6 11 16 
12 7 2 
3 8 

原创粉丝点击