一、蛇形矩阵的构建,并按行输出
例:
输入:n,
生成n*n的蛇形矩阵
1 2 3
8 9 4
7 6 5
输出:1 2 3 8 9 4 7 6 5
java编码
public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n = in.nextInt(); if(n < 0) return; if(n == 1){ System.out.println(1); return; } int[][] m = new int[n][n]; //定义4个变量,分别记录当前行和列的上下限 int i1 = 0, j1 = 0, i2 = n - 1, j2 = n - 1; int i = 0, j = 0; int begin = 1; //4个for循环,遍历蛇形矩阵 while(i1 <= i2 && j1 <= j2){ for(; j <= j2; ++j){//one row m[i][j] = begin; begin++; } j--; i++; i1++; for(; i <= i2; ++i){//one column m[i][j] = begin; begin++; } j2--; j--; i--; for(; j >= j1; --j){//one row m[i][j] = begin; begin++; } i2--; j++; i--; for(; i >= i1; --i){//one column m[i][j] = begin; begin++; } j1++; j++; i++; } //按行输出 蛇形矩阵 for(i = 0; i < n; ++i) for(j = 0; j < n; ++j) System.out.println(m[i][j] + " "); }
二、已知蛇形矩阵m,顺时针顺序输出
例:
矩阵m
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
输出:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public static void main(String[] args) { // TODO Auto-generated method stub int[][] m = {{1,2,3,4},{12,13,14,5},{11,16,15,6},{10,9,8,7}}; int n = m.length; int c = m[0].length; if(n == 1){ for(int a = 0; a < m[0].length; ++a) System.out.print(m[0][a] + " "); } if(c == 1){ for(int a = 0; a < m.length; ++a) System.out.print(m[a][0] + " "); } //定义4个指针,记录行和列的上下限 int i1 = 0, j1 = 0, i2 = n - 1,j2 = c - 1; int i = 0, j = 0; while(i1 <= i2 && j1 <= j2){//one row for(; j <= j2; ++j) System.out.print(m[i][j] + " "); i++; j--; i1++; for(; i <= i2; ++i)//one column System.out.print(m[i][j] + " "); i--; j--; j2--; for(; j >= j1; --j)//one row System.out.print(m[i][j] + " "); i--; j++; i2--; for(; i >= i1; --i)//one column System.out.print(m[i][j] + " "); i++; j++; j1++; } }