Java 生成螺旋矩阵:算法实现与代码解析

本文将介绍如何使用Java代码生成一个以1到n*n的螺旋形填充的方阵。

算法步骤

  1. 创建一个n×n的二维数组来存储矩阵。
  2. 初始化一个变量num,用于记录当前要填充的值,初始值为1。
  3. 初始化四个变量,分别表示矩阵的起始行、结束行、起始列和结束列。
  4. 循环遍历矩阵,每次循环进行如下操作:
    • 从起始列到结束列,依次填充矩阵的起始行。
    • 从起始行到结束行,依次填充矩阵的结束列。
    • 从结束列到起始列,依次填充矩阵的结束行(如果起始行小于等于结束行)。
    • 从结束行到起始行,依次填充矩阵的起始列(如果起始列小于等于结束列)。
    • 更新起始行、结束行、起始列和结束列。
  5. 重复步骤4,直到所有元素都被填充。

代码实现

import java.util.Scanner;

public class SpiralMatrix {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        
        int[][] matrix = generateMatrix(n);
        printMatrix(matrix);
    }
    
    public static int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        int num = 1;
        int startRow = 0, endRow = n - 1;
        int startCol = 0, endCol = n - 1;
        
        while (startRow <= endRow && startCol <= endCol) {
            // Traverse right
            for (int col = startCol; col <= endCol; col++) {
                matrix[startRow][col] = num++;
            }
            startRow++;
            
            // Traverse down
            for (int row = startRow; row <= endRow; row++) {
                matrix[row][endCol] = num++;
            }
            endCol--;
            
            // Traverse left
            if (startRow <= endRow) {
                for (int col = endCol; col >= startCol; col--) {
                    matrix[endRow][col] = num++;
                }
                endRow--;
            }
            
            // Traverse up
            if (startCol <= endCol) {
                for (int row = endRow; row >= startRow; row--) {
                    matrix[row][startCol] = num++;
                }
                startCol++;
            }
        }
        
        return matrix;
    }
    
    public static void printMatrix(int[][] matrix) {
        int n = matrix.length;
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}

代码解析

  • generateMatrix(int n) 方法用于生成一个n×n的螺旋矩阵。
  • printMatrix(int[][] matrix) 方法用于打印生成的矩阵。
  • 代码中使用四个循环来遍历矩阵,分别对应四个方向的填充。
  • 在填充过程中,使用num变量来记录当前要填充的值。
  • 每填充完一个方向,都要更新起始行、结束行、起始列和结束列,以便进行下一方向的填充。

示例

输入:

3

输出:

1 2 3 
8 9 4 
7 6 5

总结

本文介绍了如何使用Java代码生成一个以1到n*n的螺旋形填充的方阵。通过算法步骤、代码实现、示例以及代码注释,相信读者能够理解螺旋矩阵的生成过程。


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

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