`
The_Apocalypse
  • 浏览: 7399 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

算法:螺旋形二维矩阵实现

 
阅读更多

算法:螺旋矩阵的实现 

 

01 02 09 10 25 26 

04 03 08 11 24 27 

05 06 07 12 23 28 

16 15 14 13 22 29 

17 18 19 20 21 30 

36 35 34 33 32 31 

 

算法实现如下:

package algorithm;

public class LinerMatrix {

	/**
	 * @author buptkongxiangqi@gmail.com
	 * @param args
	 */
	public static int[][] creatematrix(int dis) {
		int[][] matrix;
		if (dis == 1) {
			matrix = new int[1][1];
			matrix[0][0] = 1;
			return matrix;
		} else {
			matrix = new int[dis][dis];
			// num表示需要赋的值
			int num = 1;
			matrix[0][0] = num;
			// i代表当前矩阵维数-1,其实也就是当前最大下标啦
			for (int i = 1; i < dis; i++) {
				// 如果当前矩阵为偶数的,则顺时针赋值
				if ((i + 1) % 2 == 0) {
					for (int k = 0; k <= i; k++) {
						num++;
						System.out.println(k + " " + i + "=" + num);
						matrix[k][i] = num;
					}
					for (int l = (i - 1); l >= 0; l--) {
						num++;
						matrix[i][l] = num;
					}
				} else {
					// 当前矩阵为奇数则顺时针赋值
					for (int k = 0; k <= i; k++) {
						num++;
						matrix[i][k] = num;
					}
					for (int l = i - 1; l >= 0; l--) {
						num++;
						matrix[l][i] = num;
					}
				}
			}
			return matrix;
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 6;
		int[][] matrix = creatematrix(n);
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				String numstr = Integer.toString(matrix[i][j]);
				if (matrix[i][j] < 10)
					numstr = "0" + numstr;
				System.out.print(numstr + " ");
			}
			System.out.println("");
		}
	}
}

 

 结果在最上边啦

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics