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

本文实例讲述了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("我们测试结果:");
        /* 输出 */
        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操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

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

(0)

相关推荐

  • Java实现的求逆矩阵算法示例

    本文实例讲述了Java实现的求逆矩阵算法.分享给大家供大家参考,具体如下: package demo; public class MatrixInverse { public static double Det(double [][]Matrix,int N)//计算n阶行列式(N=n-1) { int T0; int T1; int T2; double Num; int Cha; double [][] B; if(N>0) { Cha=0; B=new double[N][N]; Num=

  • java 矩阵乘法的mapreduce程序实现

    java 矩阵乘法的mapreduce程序实现 map函数:对于矩阵M中的每个元素m(ij),产生一系列的key-value对<(i,k),(M,j,m(ij))> 其中k=1,2.....知道矩阵N的总列数;对于矩阵N中的每个元素n(jk),产生一系列的key-value对<(i , k) , (N , j ,n(jk)>, 其中i=1,2.......直到i=1,2.......直到矩阵M的总列数. map package com.cb.matrix; import stati

  • Java矩阵连乘问题(动态规划)算法实例分析

    本文实例讲述了Java矩阵连乘问题(动态规划)算法.分享给大家供大家参考,具体如下: 问题描述:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1.确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少.输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数. 问题解析:由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序.这种计算次序可以用加括号的方式来确定.若一个矩阵连乘积的计算次序完全确

  • Java编程实现邻接矩阵表示稠密图代码示例

    我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组,那么A中的一个元素aij不仅体现出了结点vi和结点vj的关系,而且aij的值正可以表示权值的大小. 邻接矩阵模型类 邻接矩阵模型类的类名为AMWGraph.java,能够通过该类构造一个邻接矩阵表示的图,且提供插入结点,插入边,取得某一结点的第一个邻接结点和下一个邻接结点. import java.u

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

    直接上代码吧. 昨晚腾讯在线测试遇到的题. 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环. import java.util.Scanner; public class mysnakematrix { private int n; // private int a[][]; // 声明一个矩阵 private int value = 1; // 矩阵里数字的值 public mysnakematrix(int i) { this.n

  • Java语言描述存储结构与邻接矩阵代码示例

    存储结构 要存储一个图,我们知道图既有结点,又有边,对于有权图来说,每条边上还带有权值.常用的图的存储结构主要有以下二种: 邻接矩阵 邻接表 邻接矩阵 我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组,那么A中的一个元素aij不仅体现出了结点vi和结点vj的关系,而且aij的值正可以表示权值的大小. 以下是一个无向图的邻接矩阵表示示例: 从上图我们可

  • java 二维数组矩阵乘法的实现方法

    复制代码 代码如下: public interface IMatrixMultiple {     public int[][] mmltiple(int[][]a ,int [][]b); } ?public class MatrixMultiple implements IMatrixMultiple { @Override    public int[][] mmltiple(int[][] a, int[][] b) {         int [][] result = new int

  • java实现的n*n矩阵求值及求逆矩阵算法示例

    本文实例讲述了java实现的n*n矩阵求值及求逆矩阵算法.分享给大家供大家参考,具体如下: 先来看看运行结果: java版的写出来了,用的跟c语言相同的算法,然后看看能不能以后加个框做成程序: import java.math.*; import java.util.*; import java.text.*; public class matrix { static int map1[][]=new int [110][110]; static int just[][]=new int [11

  • java实现任意矩阵Strassen算法

    本例输入为两个任意尺寸的矩阵m * n, n * m,输出为两个矩阵的乘积.计算任意尺寸矩阵相乘时,使用了Strassen算法.程序为自编,经过测试,请放心使用.基本算法是: 1.对于方阵(正方形矩阵),找到最大的l, 使得l = 2 ^ k, k为整数并且l < m.边长为l的方形矩阵则采用Strassen算法,其余部分以及方形矩阵中遗漏的部分用蛮力法. 2.对于非方阵,依照行列相应添加0使其成为方阵. StrassenMethodTest.java package matrixalgorit

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

    本文实例讲述了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];/* 位置 */ /*

  • PHP实现顺时针打印矩阵(螺旋矩阵)的方法示例

    本文实例讲述了PHP实现顺时针打印矩阵的方法.分享给大家供大家参考,具体如下: 问题 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 解决方法 就是一圈一圈地打印,只要控制好循环就可以. 注意单行单列的情况. 实现代码 <?php function printMatrix($matri

  • PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析

    本文实例讲述了PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法.分享给大家供大家参考,具体如下: 回环矩阵指的是一个从一开始,不断按照上.右.下.左顺序依次增大的矩阵序列,例: 1 2 3 8 9 4 7 6 5 现在要求: 输入: m.n,分别代表行数和列数 输出: m * n 的回环矩阵 例: 输入: 7 8 输出: 1 2 3 4 5 6 7 8 26 27 28 29 30 31 32 9 25 44 45 46 47 48 33 10 24 43 54 57 56 49 34 11 2

  • Java并发编程回环屏障CyclicBarrier

    CyclicBarrier 前面介绍的CountDownLatch在解决多个线程同步方面相对于调用线程的join方法已经有了不少优化.但是CountDownLatch的计数器是一次性的,也就是等到计数器值变为0后,再调用CountDownLatch的await和countdown方法都会立刻返回,这就起不到线程同步的效果了.所以为了满足计数器可以重置的需要,JDK开发组提供了CyclicBarrier类,并且CyclicBarrier类的功能并不限于CountDownLatch的功能.从字面意思

  • JavaScript定义及输出螺旋矩阵的方法详解

    本文实例讲述了JavaScript定义及输出螺旋矩阵的方法.分享给大家供大家参考,具体如下: 昨晚无意看到这样一个算法题目,然后就想着用js来实现. 昨晚草草写完后感觉代码很丑,很臭,于是今晚又花点时间重构了一下,感觉变得优雅了. 什么是螺旋矩阵 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环. 如图: 实现效果 实现代码 (function() { var map = (function() { function map(n) { t

  • Java螺旋矩阵处理方法详解

    题目描述: 给定一 m*n 的矩阵,请按照逆时针螺旋顺序,返回矩阵中所有元素. 示例: 思路: 这是一道典型的模拟问题: 我们可以分析一下,遍历前进轨迹: 向右 - > 向下 -> 向左 -> 向上 -> 向右 … 于是,我们可以在循环中模拟这样的前进轨迹,记录 右,下,上左,四个边界,每次拐弯时更新边界值,再进行下一次拐弯,循环往复,直至结束.结束条件为 左边界加一大于右边界,或者上边界加一大于下边界. 图解: 代码: class Solution { public List&l

  • javascript实现输出指定行数正方形图案的方法

    本文实例讲述了javascript实现输出指定行数正方形图案的方法.分享给大家供大家参考.具体如下: javascript实现输出指定行数的正方形图案:点击生成图案,会有2个提示框,1,输入图案的组成字符,只能是1个字符哦2,输入正方形行数,路过大于10,会设置为10行数 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd

  • 使用python实现回文数的四种方法小结

    回文数就是指整数倒过来和原整数相等. Example 1: Input: 121 Output: true Example 2: Input: -121 Output: false Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome. Example 3: Input: 10 Output: false Expla

  • Python判断回文数的三种方法实例

    需求: 从控制台输入一个五位数,如果是回文数就打印"是回文数",否则打印"不是回文数",例如:11111 12321 12221 "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我为人人,人人为我"等.在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number). 设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=123

  • 利用Python判断整数是否是回文数的3种方法总结

    前言 所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,比如12321.本文通过三个方法详细介绍了判断的方法,下面来一起看看吧 方法一:逐位判断 原理: 用一个while循环,将一个数每次都取出首位和末位,判断是否相等,只要有一次不相等退出即可. 回文数的判断条件:加入一个变量位数,如果这个数是奇数,位数为1时,即最中间那一位数,此时退出即可,同理,偶数,位数为0时,退出. 问题: 如何判断位数 如何逐位取值 优点: 思路简单 解决: 判断位数下面程序即可 y=x weishu=0

随机推荐