You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
853 B
43 lines
853 B
package cap3
|
|
|
|
// Ex22 魔方阵,罗伯法
|
|
func Ex22(n int) [][]int {
|
|
matrix := _makeMatrix(n)
|
|
if n%2 == 0 {
|
|
return matrix
|
|
}
|
|
|
|
// 起始位置在第一行的中间
|
|
i, j := 0, n/2
|
|
|
|
for num := 1; num <= n*n; num++ {
|
|
matrix[i][j] = num // 填充数字
|
|
num++ // 下一个数字
|
|
i-- // 向上移动
|
|
j++ // 向右移动
|
|
|
|
// 如果移动后超出了上边界和右边界
|
|
if i < 0 && j > n-1 {
|
|
i += 2 // 向下移动两格
|
|
j-- // 向左移动一格
|
|
}
|
|
|
|
// 如果超出了上边界
|
|
if i < 0 {
|
|
i = n - 1 // 移动到最下面一行
|
|
}
|
|
|
|
// 如果超出了右边界
|
|
if j > n-1 {
|
|
j = 0 // 移动到最左边一列
|
|
}
|
|
|
|
// 如果当前位置已经填充了数字
|
|
if matrix[i][j] != 0 {
|
|
i += 2 // 向下移动两格
|
|
j-- // 向左移动一格
|
|
}
|
|
}
|
|
|
|
return matrix
|
|
}
|
|
|