栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现的打印螺旋矩阵算法示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现的打印螺旋矩阵算法示例

本文实例讲述了Java实现的打印螺旋矩阵算法。分享给大家供大家参考,具体如下:

一个N阶矩阵顺时针呈螺旋状,形如下面的矩阵:

思路:使用一个二维数组存放数据,数组初始化为0,数组共有n平方个元素,因为是从1开始,所以元素的值是从1到n×n。按照上面的路线从1开始遍历一遍填入数据,每填入一个数据时后,判断边界和方向(说明,任意长度和宽度都可以使用这个思路,本例使用N*N的矩阵说明)。直接上代码了:

package study.haishen.com;

public class SpiralMatrix {
    
    public int[][] createMatrix(int n)
    {
 int[][] matrix = new int[n][n];//n*n的二维数组,初始元素值都为0
 int right = 1, down = 2, left = 3, up = 4;//分别表示右下左上四个方向
 int direction = right;
 int numb = n * n;//n阶矩阵,共有n×n个数
 int i = 0, j = 0;
 for (int p = 1; p <= numb; p++)
 {
     matrix[i][j] = p;
     //判断方向向右的情况
     if(direction == right)
     {
  //如果当前位置的右面位置在右边界内且值还是初始值,则行不变,列号向右移动一位
  if (j + 1 < n && matrix[i][j + 1] == 0)
  {
      j++;
  } else {//如果超出右边边界,或者右面的元素已经被修改过,则向下移动一行,且将方向改为向下
      i++;
      direction = down;
      continue;
  }
     }
     //判断方向向下的情况
     if (direction == down)
     {
  //如果当前位置的下面位置在下边界内且值还是初始值,则列不变,行号向下移动一位
  if (i + 1 < n && matrix[i + 1][j] == 0)
  {
      i++;
  } else {//如果超出下边界,或者下面的元素已经被修改过,则向左移动一行,且将方向改为向左
      j--;
      direction = left;
      continue;
  }
     }
     //判断方向向左的情况
     if (direction == left)
     {
  //如果当前位置的左面位置在左边界内且值还是初始值,则行不变,列号向左移动一位
  if (j - 1 >= 0 && matrix[i][j - 1] == 0)
  {
      j--;
  } else {//如果超出左边界,或者左面的元素已经被修改过,则向上移动一行,且将方向改为向上
      i--;
      direction = up;
      continue;
  }
     }
     //判断方向向上的情况
     if (direction == up)
     {
  //如果当前位置的上面位置在上边界内且值还是初始值,则列不变,行号向左移动一位
  if (i - 1 >= 0 && matrix[i - 1][j] == 0)
  {
      i--;
  } else {//如果超出上边界,或者上面的元素已经被修改过,则向右移动一列,且将方向改为向右
      j++;
      direction = right;
      continue;
  }
     }
 }
 return matrix;
    }
    
    public static void main(String[] args) {
 int n = 10;
 SpiralMatrix s = new SpiralMatrix();
 int[][] data = s.createMatrix(n);
 for (int i = 0; i < n; i++)
 {
     for (int j = 0; j < n; j++)
     {
  System.out.print(data[i][j] + " ");
     }
     System.out.println();
 }
    }
}

运行结果:

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/136686.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号