zoukankan      html  css  js  c++  java
  • 从外向内扩的螺旋矩阵

    形如:

      1   2   3   4  5

     16 17 18 19  6

     15 24 25 20  7

     14 23 22 21  8

     13 12 11 10  9

    如果我们需要打印这样从外部向内扩展的n * n矩阵。

    分析:

    可以把矩阵分为n/2个圈, (上面的例子分了两个圈,最外面的圈就是12345~16,另外一个圈就是17~24)

    我们只需要以圈为单位,给二维数组中的每个数赋值。赋值的顺序也是按照数字的递增顺序(顺时针)

    Java代码如下:

    public class SpiralMatrix {
    
        private int[][] data;
        private int n;
        
        public SpiralMatrix(int n)
        {
            if (n>=1)
            {
                this.n = n;
                data = new int[n][n];
                assignData();
            }    
        }
        
        public void assignData()
        {
            int m=1,i,j;
            for (i=0; i< n/2; i++)
            {
                for (j=0; j< n-i; j++)
                {
                    if (data[i][j] == 0)
                        data[i][j] = m++;
                }
                
                for (j=i+1; j< n-i; j++)
                {
                    if (data[j][n-1-i] == 0)
                        data[j][n-1-i] = m++;
                }
                
                for (j=n-i-1; j>i; j--)
                {
                    if (data[n-i-1][j] == 0)
                        data[n-i-1][j] = m++;
                }
                
                for (j=n-i-1; j>i; j--)
                {
                    if (data[j][i] == 0)
                        data[j][i] = m++;
                }
            }
            if (n%2 == 1)
                data[n/2][n/2] = m;
        }
        
        public void printData()
        {
            for (int i=0; i<n; i++)
            {
                for (int j=0; j<n; j++)
                    System.out.print(data[i][j]+"	");
                System.out.println();
            }
        }
        
        public static void main(String[] args)
        {
            SpiralMatrix  sm = new SpiralMatrix(7);
            sm.printData();
        }
        
    }

    输出结果:

    1   2   3   4   5   6    7

    24 25 26 27 28 29   8

    23 40 41 42 43 30   9

    22 39 48 49 44 31  10

    21 38 47 46 45 32  11

    20 37 36 35 34 33  12

    19 18 17 16 15 14  13

  • 相关阅读:
    Spring 实践 -IoC
    HDU1584:蜘蛛牌(DFS)
    Linux命令缩写来由
    一道面试题:用shell写一个从1加到100的程序
    常用的OpenCV函数速查
    等差数列/等比数列通项公式与求和公式
    ubuntu给手机建wifi
    [转]C++之运算符重载(2)
    [转]C++之运算符重载(1)
    [转]C++之多态性与虚函数
  • 原文地址:https://www.cnblogs.com/rambot/p/3704570.html
Copyright © 2011-2022 走看看