给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
先来个3*3
| 8 | 1 | 6 |
| 3 | 5 | 7 |
| 4 | 9 | 2 |
n奇数幻方口诀:
1. 数字1放在第一行中间
2. 依次放在上一个数的右上角
2.1如果右边出去了就回到左边
2.2 如果上面出去了就放下面
2.3 如果右上角有了就放在这个数的下面
vector<vector<int> > Shudu(int n)
{
vector<vector<int> > ret(n, vector<int>(n, 0));
int i = 0, j = n/2, k = 2;
ret[i][j] = 1;
while(k <= n*n)
{
int tempi = i-1;
int tempj = j+1;
if(tempi < 0)
tempi = n-1;
if(tempj > n-1)
tempj = 0;
if(ret[tempi][tempj] != 0)
{
tempi = i+1;
tempj = j;
}
ret[tempi][tempj] = k;
i = tempi;
j = tempj;
++k;
}
return ret;
}
{
vector<vector<int> > ret(n, vector<int>(n, 0));
int i = 0, j = n/2, k = 2;
ret[i][j] = 1;
while(k <= n*n)
{
int tempi = i-1;
int tempj = j+1;
if(tempi < 0)
tempi = n-1;
if(tempj > n-1)
tempj = 0;
if(ret[tempi][tempj] != 0)
{
tempi = i+1;
tempj = j;
}
ret[tempi][tempj] = k;
i = tempi;
j = tempj;
++k;
}
return ret;
}
3阶奇数幻方生成算法详解
本文详细介绍了如何生成3阶奇数幻方,包括生成规则、算法实现及实例展示,帮助读者理解并掌握奇数幻方的构造原理。
8398

被折叠的 条评论
为什么被折叠?



