|
|
|
package cap3
|
|
|
|
|
|
|
|
// Ex21 螺旋阵
|
|
|
|
func Ex21(n int) [][]int {
|
|
|
|
matrix := _makeMatrix(n)
|
|
|
|
|
|
|
|
// 逐层往里填充
|
|
|
|
num := 1
|
|
|
|
for layer := 0; layer < n/2; layer++ {
|
|
|
|
// 方阵左边
|
|
|
|
for i := layer; i < n-layer; i++ {
|
|
|
|
matrix[i][layer] = num
|
|
|
|
num++
|
|
|
|
}
|
|
|
|
|
|
|
|
// 方阵下边
|
|
|
|
for i := layer + 1; i < n-layer; i++ {
|
|
|
|
matrix[n-layer-1][i] = num
|
|
|
|
num++
|
|
|
|
}
|
|
|
|
|
|
|
|
// 方阵右边
|
|
|
|
for i := n - layer - 2; i >= layer; i-- {
|
|
|
|
matrix[i][n-layer-1] = num
|
|
|
|
num++
|
|
|
|
}
|
|
|
|
|
|
|
|
// 方阵上边
|
|
|
|
for i := n - layer - 2; i > layer; i-- {
|
|
|
|
matrix[layer][i] = num
|
|
|
|
num++
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 奇数阶中间位置需要手动设置
|
|
|
|
if n%2 != 0 {
|
|
|
|
matrix[n/2][n/2] = n * n
|
|
|
|
}
|
|
|
|
|
|
|
|
return matrix
|
|
|
|
}
|
|
|
|
|
|
|
|
func Ex21type2(n int) [][]int {
|
|
|
|
matrix := _makeMatrix(n + 10)
|
|
|
|
|
|
|
|
row, col, t := 0, 0, 1
|
|
|
|
|
|
|
|
for i := 0; i < n*n; {
|
|
|
|
for j := 0; j < 2*n; j++ {
|
|
|
|
i++
|
|
|
|
matrix[row][col] = i
|
|
|
|
|
|
|
|
switch (j + 1) / (n + 1) {
|
|
|
|
case 0:
|
|
|
|
row += t
|
|
|
|
case 1:
|
|
|
|
col += t
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
n--
|
|
|
|
t = -t
|
|
|
|
}
|
|
|
|
|
|
|
|
return matrix
|
|
|
|
}
|