`
heisedeyueya
  • 浏览: 97734 次
  • 性别: 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();
		}
	}
}
分享到:
评论

相关推荐

    蛇形矩阵(用二元数组实现)

    蛇形矩阵,也被称为“螺旋矩阵”,是一种特殊的矩阵排列方式,它从左上角开始,按照右、下、左、上的顺序依次填充元素。在编程领域,特别是在学习数组和循环结构时,蛇形矩阵是一个经典的练习题目,因为它涉及到对数...

    使用二维数组和双重循环打印蛇形矩阵

    使用二维数组和双重循环打印蛇形矩阵使用二维数组和双重循环打印蛇形矩阵使用二维数组和双重循环打印蛇形矩阵

    蛇形矩阵c++程序(数值排列)

    蛇形矩阵,也被称为“螺旋矩阵”,是一种特殊的二维数组,其元素按照螺旋形状填充。在C++编程中,实现蛇形矩阵通常涉及到数组操作、循环控制以及条件判断。以下是对这个话题的详细解释: 首先,我们需要理解蛇形...

    java 蛇形矩阵 最简单的 初学者用

    java 蛇形矩阵 最简单的 初学者用

    C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵

    C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之...

    c++蛇形矩阵

    以前用c++写的一个蛇形矩阵

    N阶蛇形矩阵生成(java)

    生成一个n阶的蛇形矩阵的java程序 输入矩阵宽度n生成宽度为n的递增的蛇形矩阵

    蛇形矩阵 C++ 源代码

    用C++写的一个蛇形矩阵,当输入一个整数n(10&gt;=n&gt;=1)时,输出大小为n行n列的蛇形矩阵。

    蛇形矩阵(Java实现代码)

    因此输出的形状,像条蛇,因此称为蛇形矩阵.

    逆时针蛇形矩阵问题

    逆时针蛇形矩阵是一种特殊的二维数组排列方式,它的特点是元素按照从左上角开始,先向右走,然后向下,接着向左,最后向上,如此反复,形成一个逆时针方向的“S”形路径。在C语言中实现这个功能,需要对数组操作和...

    解题训练 蛇形矩阵.doc

    【蛇形矩阵】是一种特殊的矩阵填充方式,通常用于编程题目中。它的特点是按照蛇的爬行路径填充数字,从左上角开始,先向右,然后向下,再向左,接着向上,如此反复,直到填满整个正方形矩阵。题目要求输入矩阵的边长...

    蛇形矩阵递归算法

    蛇形矩阵递归算法,通过简单地递归实现蛇形矩阵的输出

    蛇形矩阵的源代码

    蛇形矩阵的源代码,自己写的……不对的地方还望指教

    c++练习题蛇形矩阵

    c++练习题蛇形矩阵

    c语言版蛇形矩阵实现

    蛇形矩阵的实现的经典案例for(i=1;i;i++)/*对副对角线上三角端点赋值*/ { k=k+i; if(i%2==1) { a[0][i]=k; a[i][0]=k+i; } else { a[i][0]=k; a[0][i]=k+i; } }

    螺旋蛇形矩阵

    螺旋蛇形矩阵是一种特殊的二维数组布局,它按照特定的规则填充数字。在这个程序中,我们看到的是一个逆时针方向的填充值排列。通常,这种矩阵的填充方式是从左上角开始,按照顺时针或逆时针方向螺旋式地填充数字。在...

    蛇形矩阵算法

    蛇形矩阵,也被称为“螺旋矩阵”,是一种特殊的二维数组布局方式,它的特点是元素按照类似蛇行的方式填充。这种矩阵在编程挑战、数据存储以及解决某些特定问题时具有应用价值。接下来,我们将深入探讨三种实现蛇形...

    蓝桥杯-蛇形矩阵题解.zip

    蓝桥杯—蛇形矩阵题解.zip 是一个压缩文件,包含了关于蛇形矩阵问题的详细题解和代码实现。该资源旨在帮助参加蓝桥杯竞赛的选手更好地理解蛇形矩阵问题,并提供相应的解决方案和代码示例。 内容概要: 该压缩文件...

    打印蛇形矩阵

    // 例如 4 x 4 蛇形矩阵 // 1 3 - 4 10 // | / / / | // 2 5 9 11 // / / / // 6 8 12 15 // | / / / | // 7 13 - 14 16 http://blog.csdn.net/ssuchange/article/details/17347743

    shexingjuzhen.rar_蛇形矩阵c++

    蛇形矩阵,也被称为螺旋矩阵或螺旋顺序矩阵,是一种特殊的二维数组排列方式。在这个矩阵中,数字按照螺旋路径从左上角开始,向右、向下、向左、向上依次填入,形成一个类似蛇行的路径。在C++编程语言中实现这样的...

Global site tag (gtag.js) - Google Analytics