解决方法: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 }
原文链接: https://www.cnblogs.com/zpc-uestc/p/6006042.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/242901
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!