时间:2021-05-20
本文实例讲述了Java实现的打印螺旋矩阵算法。分享给大家供大家参考,具体如下:
一个N阶矩阵顺时针呈螺旋状,形如下面的矩阵:
思路:使用一个二维数组存放数据,数组初始化为0,数组共有n平方个元素,因为是从1开始,所以元素的值是从1到n×n。按照上面的路线从1开始遍历一遍填入数据,每填入一个数据时后,判断边界和方向(说明,任意长度和宽度都可以使用这个思路,本例使用N*N的矩阵说明)。直接上代码了:
package study.haishen.com;/** * @author Administrator * */public class SpiralMatrix { /** * @param n n阶 * @return */ 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; } /** * 测试 * @param args */ 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程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
打印旋转矩阵应该是很经典的算法问题了。题目描述如下:给定一个m*n要素的矩阵。按照螺旋顺序,返回该矩阵的所有要素。思路:1,先定义矩阵的左上和右下的坐标,然后通
本文实例讲述了Python实现螺旋矩阵的填充算法。分享给大家供大家参考,具体如下:afanty的分析:关于矩阵(二维数组)填充问题自己动手推推,分析下两个下表的
java实现的顺时针/逆时针打印矩阵操作。分享给大家供大家参考,具体如下:publicclassSnakeMatrix{/***定义矩阵的阶数*/private
本文实例讲述了java实现的n*n矩阵求值及求逆矩阵算法。分享给大家供大家参考,具体如下:先来看看运行结果:java版的写出来了,用的跟c语言相同的算法,然后看
本文实例讲述了Java实现矩阵加减乘除及转制等运算功能。分享给大家供大家参考,具体如下:Java初学,编写矩阵预算程序,当做工具,以便以后写算法时使用。publ