`
xifangyuhui
  • 浏览: 188987 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

蛇形矩阵的java实现

阅读更多

题目:

计算并输出 nXn 的蛇形矩阵。(n>0)
例如 4X4 的蛇形矩阵如下:
1   3   4  10
2   5   9  11
6   8  12  15
7  13  14  16

 

类似于前面的输出螺旋矩阵的方法,每一次在数组中填写新的数字都有一个方向,与输出螺旋数组不同的是不是简单的上下左右四个方向,这里涉及到右,下,右上,左下四个方向,针对每步操作都需要想好对应的处理方法,如:

1)向右上位置填写元素的时候可能会碰到行<0或者是列>=N,如果行小于0,那么接下来就需要向右填写元素,列大于等于N,那么很明显接下来就要向下填写元素。

2)向下添加元素时,也会碰到一些情况,例如行>=N了,表示添加到最后一行了,此时需要向右移动,另外在第一列和最后一列向下添加元素情况也不一样,在第一列向下添加元素后,接下来应该向右上添加元素,在最后一列向下添加元素后接下来应该向左下添加元素。

向左下和向右填写元素与这类似。

参加下面的代码(代码来自于http://blog.csdn.net/Mailbomb/archive/2008/07/05/2613736.aspx

 

public static void main(String[] args) {
		/**2、计算并输出nXn的蛇形矩阵。(n>0)
		* 例如4X4的蛇形矩阵如下:
		* 1  3  4 10
                                  * 2  5  9 11
                                  * 6  8 12 15
                                  * 7 13 14 16
		 */ 
		//DOWN UPRIGHT RIGHT LEFTDOWN
		int n=5;
		int[][] data = new int[n][n];
		int dire; //当前数字的移动方向
		final int UPRIGHT = 0; //上右
		final int DOWN = 1; // 下
		final int LEFTDOWN= 2; //左下
		final int RIGHT = 3;// 右
		dire = DOWN;
		int value = 1; //数组元素的值
		int row = 0; //第一维下标
		int col = 0; //第二维下标
		data[0][0] = 1; //初始化第一个元素 
		data[n-1][n-1] = n*n;
		while(value < n * n-1){
			System.out.print("("+dire+")");
			switch(dire){
				case DOWN://DOWN -UPRIGHT +RIGHT -LEFTDOWN
					row++; //移动到下一行
					if(row>=n){ //超过边界
						row--; //后退
						dire = RIGHT;
						continue; //跳过该次循环
					}
					else 
					{
						value++; //数值增加1
						data[row][col] = value;//赋值
						if(col==0) { 
							dire = UPRIGHT; 
						}
						else if(col==n-1){ 
							dire = LEFTDOWN; 
						}
					} 
					break;
				case UPRIGHT://+DOWN -UPRIGHT +RIGHT LEFTDOWN
					row--;
					col++; //移动到上一行,右一列
					if(col>=n)//超过边界
					{
						row++;
						col--; //后退
						dire = DOWN;
						continue; //跳过该次循环
					}
					else if(row<0){ //超过边界
						row++;
						col--; //后退
						dire = RIGHT; 
						continue; //跳过该次循环 
					} else {
						value++; //数值增加1
						data[row][col] = value;//赋值
						dire = UPRIGHT;
					}
					break;
				case RIGHT://+DOWN -UPRIGHT RIGHT -LEFTDOWN
					col++; //移动到右一列
					if(col>=n){ 
						col--; //后退
						dire = DOWN;
						continue; //跳过该次循环
					}
					else {
						value++; //数值增加1
						data[row][col] = value;//赋值
						if(row==0) { 
							dire = LEFTDOWN; 
						}
						else if(row==n-1){ 
							dire = UPRIGHT; 
						}
					}
					break;
				case LEFTDOWN://+DOWN UPRIGHT +RIGHT -LEFTDOWN
					row++;
					col--; //移动到下一行,左一列
					if(row>=n) { //超过边界
						row--;col++; //后退
						dire = RIGHT;
						continue; //跳过该次循环
					}else if(col<0)//超过边界
					{
						row--;col++; //后退
						dire = DOWN;
						continue; //跳过该次循环
					}
					else {
						value++; //数值增加1
						data[row][col] = value;//赋值
						dire = LEFTDOWN;
					}
					break;
			}
		}
		System.out.println();
		//输出数组中的元素
		for(int i = 0;i < data.length;i++){
			for(int j = 0;j < data[i].length;j++){
				if(data[i][j] < 10){//右对齐
					System.out.print(' ');
				}
				System.out.print(data[i][j]);
				System.out.print(' ');
		    }
		   System.out.println();
		}

 

 

0
0
分享到:
评论
3 楼 tinygroup 2015-04-03  
Sorry发错了。
2 楼 tinygroup 2015-04-03  
   public static int[][] spiralMatrix(int n) {
        int circleMatrix[][] = new int[n][n];
        for (int num = 1, x = 0, y = 0, xDir = 1, yDir = 0; num <= n * n; num++) {
            circleMatrix[x][y] = num;
            if (x + xDir < 0 || y + yDir < 0 || x + xDir == n || y + yDir == n || circleMatrix[x + xDir][y + yDir] != 0) {//如果到边界了就换方向
                if (xDir != 0) {
                    yDir = xDir;
                    xDir = 0;
                } else {
                    xDir = -yDir;
                    yDir = 0;
                }
            }
            x += xDir;
            y += yDir;
        }
        return circleMatrix;
    }
1 楼 annie11640389 2013-05-14  
建议先判断再移动

相关推荐

    蛇形矩阵(Java实现代码)

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

    JAVA语言实现蛇行矩阵

    在Java编程中,实现蛇形矩阵是一种常见的算法问题,它涉及到了二维数组的处理和逻辑判断。蛇形矩阵,顾名思义,是按照蛇的行走路径填充一个n*n的矩阵。在这个问题中,我们首先要理解蛇形矩阵的规则,然后利用条件...

    JAVA蛇形数组(向下开始)

    在给定的“JAVA蛇形数组(向下开始)”主题中,我们将重点讨论如何在Java中创建一个仅支持向下开始的蛇形数组。 首先,我们需要理解如何构建这样的数组。蛇形数组的构造可以通过迭代或递归的方式实现。在这个案例中...

    LeetCode:leetcode和剑指offer题解的Java实现

    在这里,我们将主要讨论这些资源的Java实现,以及如何通过它们来学习和提升Java编程技巧。 首先,LeetCode上的问题覆盖了数据结构、排序算法、图论、搜索等领域,是程序员提高算法基础和实践能力的理想平台。Java...

    Java编程实现打印螺旋矩阵实例代码

    shell函数用于生成蛇形矩阵的第m层。该函数使用side函数来生成每一边的数字,并使用getcorner函数来计算左上角的数字值。 snakeMatrix函数用于生成整个螺旋矩阵。该函数使用shell函数来生成每一层的数字,并将这些...

    ACM 算法实现 Java语言

    描述 "33道 ACM算法题目 用java实现 ACM都已经通过" 暗示了这些算法已经被成功地用Java编程语言实现了,并且在实际的ACM竞赛环境中通过了测试,证明了它们的有效性和正确性。这涵盖了不同类型的算法,包括数学、数据...

    螺旋矩阵和折线矩阵算法

    **折线矩阵** 又称为Z形矩阵或蛇形矩阵,其遍历方式是沿着“Z”字形路径填充或读取矩阵元素。同样以左上角为起点,先按行填充,然后在每一行的末尾转折,沿对角线向下填充,再转折,如此反复,直到遍历完整个矩阵。...

    Java入门题目集合

    4. **拉丁方阵**:拉丁方阵的生成可以使用回溯法或者深度优先搜索(DFS)实现。定义一个二维数组,初始化为1到N的数字,然后检查每一步是否符合拉丁方阵的条件。如果不符合,就回溯到上一步,尝试其他可能。这个过程...

    java入门必做题目

    Java 入门编程题目解析: 1. **等式求解与算术计算竖式** 这个问题涉及基础的字符串处理和数学逻辑。你需要创建一个程序,将字母替换为对应的数字,确保每个字母对应一个唯一的数字。可以使用哈希映射存储字母和...

    2014~2017ccf osp认证最全代码综合(java语言)

    此程序实现了一个矩阵的蛇形打印功能。 **代码解析:** 1. **输入处理:** - 使用 `Scanner` 类从标准输入读取数据。 - 首先读取一个整数 `n`,表示矩阵的大小。 - 创建一个 `n * n` 的二维数组 `int[][] array...

    matlab集成c代码-vrep-snakerobot-linearprogression:vrep-snakerobot线性进展

    MATLAB允许矩阵处理,函数和数据绘制,算法实现,用户界面创建以及与用其他语言(包括C,C ++,C#,Java,Fortran和Python)编写的程序进行接口。 Matlab可以在以下网站的“产品”部分中找到: V-REP安装 具有集成...

Global site tag (gtag.js) - Google Analytics