`
heisedeyueya
  • 浏览: 96613 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

蛇形矩阵

阅读更多
题目要求:输入一个整型数n
输出:
1  2  3  4  5 
16 17 18 19 6 
15 24 25 20 7 
14 23 22 21 8 
13 12 11 10 9 

解题思路:
1.观察输出结果,分析可以通过方向的改变来对行列的值进行改变。

1)right:row = row;col = col + 1
2)down:row = row + 1;col = col;
3)left:row = row;col = col-1;
4)up:row = row-1;col = col;

2.再通条件控制方向就行了。
下面是代码:
这个是定义的一个方向的枚举类型
package org.iSun.heisedeyueya;

public enum Direction {
	Left, Right, Up, Down
}


下面是具体算法和测试
package org.iSun.heisedeyueya;

public class Funciton {

	/**
	 * @author 黑色的月牙
	 * @param args
	 */
	public static void main(String[] args) {
		print(5);
	}

	public static void print(int n) {
		// 开始的默认方向
		Direction direction = Direction.Right;
		int[][] arr = new int[n][n];
		int row = 0, col = 0;
		arr[0][0] = 1;

		for (int i = 2; i <= n * n; i++) {
			switch (direction) {
			case Right:
				col = col + 1;
				// 当col<n并且arr[row][col]==0(也就是还没有填值的时候)
				if (col < n && (arr[row][col] == 0)) {
					arr[row][col] = i;
				} else {
					i = i - 1;// 从if语句块儿跳出的时候i =i+1,但那时无效,所以此时i = i-1,恢复i的值
					col = col - 1;
					direction = Direction.Down;
				}
				break;
			case Down:
				row = row + 1;
				if ((row < n) && (arr[row][col] == 0)) {
					arr[row][col] = i;
				} else {
					i = i - 1;
					row = row - 1;
					direction = Direction.Left;
				}
				break;
			case Left:
				col = col - 1;
				if ((col >= 0) && arr[row][col] == 0) {
					arr[row][col] = i;
				} else {
					i = i - 1;
					col = col + 1;
					direction = Direction.Up;
				}
				break;
			case Up:
				row = row - 1;
				if ((row >= 0) && arr[row][col] == 0) {
					arr[row][col] = i;
				} else {
					i = i - 1;
					row = row + 1;
					direction = Direction.Right;
				}
				break;
			}
		}
		/**
		 * 打印输出
		 */
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics