数据结构之幻方连续摆数法

来源:互联网 发布:工业大数据分析的步骤 编辑:程序博客网 时间:2024/04/30 06:40

(1)幻方概念:

n阶幻方是指自然数1---n的平方排列成n*n阶方阵,其各行各列及对角线上的数字之和相等,和数S=n(n的平方+1)/2。

(2)连续摆数法概念:



(3)代码实现

import java.util.Scanner;/** * @date 2017-5-31 * @author liuffei * @description 求解n阶幻方 */public class MagicSquare {/** * 连续摆数法:适用于构造奇数阶幻方 * @return */public static int[][] continuousPendulumMethod(int n){//创建一个空的二维矩阵int[][] matrix = new int[n][n];int end = n*n;//最后一个数int begin = n/2 ;//开始的位置int count = 1;matrix[0][begin] = count;int i = 0,j = begin;//循环开始while(count < end){if(i == 0){i = n - 1;j = j + 1;matrix[i][j] = ++count;}//沿斜线上递增while(j < n - 1 && count < end && i > 0){i--;j++;if(0 != matrix[i][j]){//如果已经存在数字,就退到前一个数的下一行上i = i + 2;j = j - 1;matrix[i][j] = ++count;}else{matrix[i][j] = ++count;}}//当递增到右边时,折返到左边,此时i已经加1,j置为0while(j == n -1  && count < end){if(i == 0){i = 1;}else{j = 0;i = i - 1;}matrix[i][j] = ++count;}}return matrix;} /**     * 打印矩阵     * @param matrix 矩阵     */    public static void printMatrix(int[][] matrix){    int row = matrix.length;    for(int i = 0;i < row;i++){    for(int j = 0;j < matrix[i].length;j++){    System.out.print(matrix[i][j] + " ");    }    System.out.println("");    }    }public static void main(String[] args) {System.out.println("请输入奇数方阵的阶数:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[][] matrix = continuousPendulumMethod(n);printMatrix(matrix);}}

(4)实现效果