Java 代码生成螺旋矩阵:算法实现与示例

问题描述: 给定一个整数 n,生成一个以 1 到 n x n 的螺旋形填充的方阵。

算法思路:

  1. 初始化一个 n x n 的矩阵,并定义四个边界变量:rowStartrowEndcolStartcolEnd,分别代表矩阵的行起始位置、行结束位置、列起始位置和列结束位置。
  2. 从左到右填充矩阵的第一行。
  3. 从上到下填充矩阵的最后一列。
  4. 从右到左填充矩阵的最后一行(如果还有)。
  5. 从下到上填充矩阵的第一列(如果还有)。
  6. 更新边界变量,并重复步骤 2 到 5,直到所有元素都被填充。

Java 代码:

import java.util.Scanner;

public class SpiralMatrix {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print('请输入一个整数 n:');
        int n = input.nextInt();
        input.close();
        
        int[][] matrix = generateSpiralMatrix(n);
        
        System.out.println('生成的螺旋矩阵为:');
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + '\t');
            }
            System.out.println();
        }
    }
    
    public static int[][] generateSpiralMatrix(int n) {
        int[][] matrix = new int[n][n];
        int num = 1;
        int rowStart = 0, rowEnd = n - 1;
        int colStart = 0, colEnd = n - 1;
        
        while (rowStart <= rowEnd && colStart <= colEnd) {
            // 从左到右填充
            for (int i = colStart; i <= colEnd; i++) {
                matrix[rowStart][i] = num++;
            }
            rowStart++;
            
            // 从上到下填充
            for (int i = rowStart; i <= rowEnd; i++) {
                matrix[i][colEnd] = num++;
            }
            colEnd--;
            
            // 从右到左填充
            if (rowStart <= rowEnd) {
                for (int i = colEnd; i >= colStart; i--) {
                    matrix[rowEnd][i] = num++;
                }
                rowEnd--;
            }
            
            // 从下到上填充
            if (colStart <= colEnd) {
                for (int i = rowEnd; i >= rowStart; i--) {
                    matrix[i][colStart] = num++;
                }
                colStart++;
            }
        }
        
        return matrix;
    }
}

运行结果示例:

请输入一个整数 n:4
生成的螺旋矩阵为:
1   2   3   4   
12  13  14  5   
11  16  15  6   
10  9   8   7

总结: 该代码通过循环和边界条件的判断,实现了螺旋矩阵的生成。通过改变输入的整数 n,可以生成不同大小的螺旋矩阵。该算法简洁高效,易于理解和应用。


原文地址: https://www.cveoy.top/t/topic/pkOl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录