C++ 实现奇数阶幻方生成算法 - Siamese Method
#include <iostream>\n#include <vector>\n\nstd::vector<std::vector<int>> generateMagicSquare(int n) {\n std::vector<std::vector<int>> magicSquare(n, std::vector<int>(n, 0));\n int row = n - 1;\n int col = n / 2;\n \n for (int num = 1; num <= n * n; num++) {\n magicSquare[row][col] = num;\n row = (row + 1) % n;\n col = (col + 1) % n;\n if (magicSquare[row][col] != 0) {\n row = (row - 1 + n) % n;\n col = (col - 2 + n) % n;\n }\n }\n \n return magicSquare;\n}\n\nvoid printMagicSquare(const std::vector<std::vector<int>>& magicSquare) {\n for (const auto& row : magicSquare) {\n for (int num : row) {\n std::cout << num << "\t";\n }\n std::cout << std::endl;\n }\n}\n\nint main() {\n int n;\n std::cout << "Enter the size of magic square (odd number): ";\n std::cin >> n;\n \n if (n % 2 == 0) {\n std::cout << "Invalid input. Size must be odd." << std::endl;\n return 0;\n }\n \n std::vector<std::vector<int>> magicSquare = generateMagicSquare(n);\n \n std::cout << "Magic Square:" << std::endl;\n printMagicSquare(magicSquare);\n \n return 0;\n}\n\n该代码定义了两个函数 generateMagicSquare 和 printMagicSquare,分别用于生成N阶奇数幻方和打印幻方。在 main 函数中,首先要求用户输入幻方的大小(必须为奇数),然后调用 generateMagicSquare 生成幻方,并使用 printMagicSquare 打印幻方。\n\n注意:在生成幻方时,采用了“Siamese Method”(斯亚姆方法)。算法从第一行中间的列开始,依次填充数字,并按照一定规则移动到相邻的位置。如果下一个位置已经被填充,则向上移动一行,向左移动两列。这个过程一直持续到所有位置都被填充完毕。
原文地址: https://www.cveoy.top/t/topic/pBDs 著作权归作者所有。请勿转载和采集!