【C++小白成长撸】--N阶幻方(魔阵)矩阵
解决方法:1.第一个元素放在第一行中间一列
2.下一个元素存放在当前元素的上一行、下一列。
3.如果上一行、下一列已经有内容,则下一个元素的存放位置为当前列的下一行。
在找上一行、下一行或者下一列的时候,必须把这个矩阵看成是回绕的。
代码中,为了判断,当前位置是否有元素,我引入与魔方矩阵规模相同的另一个矩阵,如果魔方矩阵一个位置不为空,相应另一个矩阵那个位置为1,否则为0.
1 /*程序的版权和版本声明部分: 2 **Copyright(c) 2016,电子科技大学本科生 3 **All rights reserved. 4 **文件名:N阶魔方矩阵 5 **程序作用:N阶魔方矩阵 6 **作者:Amoshen 7 **完成日期:2016.10.27 8 **版本号:V1.0 9 */ 10 #include <iostream> 11 12 using namespace std; 13 14 #define MAX_SIZE 100 15 16 int main(void) 17 { 18 int ROW,CIE,i,j,N,ROW1,CIE1; 19 int MAGIC[MAX_SIZE][MAX_SIZE] = {0}; 20 int b[MAX_SIZE][MAX_SIZE] = {0}; 21 22 cout <<"N阶中N只能是奇数!! warning" <<endl; 23 cout << "输入魔阵阶数N:"; 24 cin >> N; 25 //实现魔阵的填充 26 27 ROW = 0; 28 CIE = (N - 1)/2; 29 30 MAGIC[ROW][CIE] = 1; 31 b[ROW][CIE] = 1; 32 33 for(i = 2;i <= (N*N);i++)// 34 { 35 ROW1 = ROW - 1; 36 CIE1 = CIE + 1; 37 38 if(ROW1 < 0) 39 { 40 ROW1 = N - 1; 41 } 42 if(CIE1 > (N - 1)) 43 { 44 CIE1 = 0; 45 } 46 47 if(b[ROW1][CIE1] == 0) 48 { 49 ROW = ROW1; 50 CIE = CIE1; 51 MAGIC[ROW][CIE] = i; 52 b[ROW][CIE] = 1; 53 } 54 else 55 { 56 ROW = ROW + 1; 57 if(ROW == N) 58 { 59 ROW = 0; 60 } 61 MAGIC[ROW][CIE] = i; 62 b[ROW][CIE] = 1; 63 } 64 } 65 66 cout << "N阶魔阵的输出实现:" <<endl; 67 //N阶魔阵的输出实现 68 for(i = 0;i < N;i++) 69 { 70 for(j = 0;j < N;j++) 71 { 72 cout << MAGIC[i][j] << '\t'; 73 } 74 cout << endl; 75 } 76 77 return 0; 78 }