用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java螺旋矩阵算法

2013-05-06 作者: 小蜜锋举报

[java]代码库

public class Test {
	
	// 螺旋矩阵算法
	// 1  2  3  4  5  6  7  8  
	// 28 29 30 31 32 33 34 9
	// 27 48 49 50 51 52 35 10
	// 26 47 60 61 62 53 36 11
	// 25 46 59 64 63 54 37 12
	// 24 45 58 57 56 55 38 13
	// 23 44 43 42 41 40 39 14
	// 22 21 20 19 18 17 16 15
	public static void main(String[] args) {
		int m = 8;/* 行 */
		int n = 8;/* 列 */
		int[][] pos = new int[m][n];/* 位置 */

		int count = 0;
		int r = 0, c = 0;/* r:行下标 c:列下标 pos[r][c]对应以上位置 */
		/* 赋值方向,先向右c++,再向下r++,再向左c--,再向上r-- */
		final int up = 1;
		final int down = -1;
		final int left = 2;
		final int right = -2;
		int dir = right;/* 开始方向 */
		int cir = 1;/* 第几圈赋值 */
		while (true) {
			count++;
			pos[r][c] = count;/* 赋值 */
			switch (dir) {
			case right:
				if (c < n - cir) {/* 当前行右方还有没赋值的 */
					c++;
				} else {
					dir = down;
					r++;
				}
				break;
			case down:
				if (r < m - cir) {/* 当前列下方还有没赋值的 */
					r++;
				} else {
					dir = left;
					c--;
				}
				break;
			case left:
				if (c > cir - 1) {/* 当前行左边还有没赋值的 */
					c--;
				} else {
					dir = up;
					r--;
				}
				break;
			case up:
				if (r > cir) {/* 当前列上边边还有没赋值的 */
					r--;
				} else {
					cir++;/* 赋值了一圈 */
					dir = right;
					c++;
				}
				break;
			}
			if (count >= m * n) {
				break;
			}
		}
		/* 输出 */
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if (pos[i][j] < 10) {
					System.out.print(pos[i][j] + " " + " ");
				} else {
					System.out.print(pos[i][j] + " ");
				}
			}
			System.out.println();
		}
	}

}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...