首页 > 开发 > Java > 正文

Java实现输出回环数(螺旋矩阵)的方法示例

2024-07-13 10:15:35
字体:
来源:转载
供稿:网友

本文实例讲述了Java实现输出回环数(螺旋矩阵)的方法。分享给大家供大家参考,具体如下:

以前见过,没做出来;那天论坛再见,灵感来了,太神奇了

复杂度好像为 o(n)

保存下来

package demo;public class snakeMatrixDemo {    public static void main(String[] args) {        int m = 5;/* 行 */        int n = 5;/* 列 */        int[][] pos = new int[m][n];/* 位置 */        /**         * 位置结构如下: [0][0],[0][1],[0][2],[0][3],[0][4]         *         * [1][0],[1][1],[1][2],[1][3],[1][4]         *         * [2][0],[2][1],[2][2],[2][3],[2][4]         *         * [3][0],[3][1],[3][2],[3][3],[3][4]         *         * [4][0],[4][1],[4][2],[4][3],[4][4]         */        int count = 0;        int r = 0, c = 0;/* r:行下标 c:列下标 pos[r][c]对应以上位置 */        /* 赋值方向,先向右c++,再向下r++,再向左c--,再向上r-- */        final int up = 1;        final int down = -1;        final int left = 2;        final int right = -2;        int dir = right;/* 开始方向 */        int cir = 1;/* 第几圈赋值 */        while (count < m * n) {            count++;            pos[r][c] = count;/* 赋值 */            switch (dir) {            case right:                if (c < n - cir) {/* 当前行右方还有没赋值的 */                    c++;                } else {                    dir = down;                    r++;                }                break;            case down:                if (r < m - cir) {/* 当前列下方还有没赋值的 */                    r++;                } else {                    dir = left;                    c--;                }                break;            case left:                if (c > cir - 1) {/* 当前行左边还有没赋值的 */                    c--;                } else {                    dir = up;                    r--;                }                break;            case up:                if (r > cir) {/* 当前列上边边还有没赋值的 */                    r--;                } else {                    cir++;/* 赋值了一圈 */                    dir = right;                    c++;                }                break;            }        }        System.out.println("VeVb武林网测试结果:");        /* 输出 */        for (int i = 0; i < m; i++) {            for (int j = 0; j < n; j++) {                if (pos[i][j] < 10) {                    System.out.print(pos[i][j] + " " + " ");                } else {                    System.out.print(pos[i][j] + " ");                }            }            System.out.println();        }    }}

运行结果:

Java,回环数,螺旋矩阵

 

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


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表