package main import ( "fmt" ) func doubleSliceInt(y, x int) [][]int{ mslice := make([][]int, y) for i:= range mslice{ mslice[i] = make([]int, x) } return mslice } func odd(N int, z [][]int) [][]int{ y := 0 x := N / 2 for i := 0; i < N*N; i++ { z[y][x] = i + 1 y2 := (y + N - 1) % N x2 := (x + 1) % N if z[y2][x2] != 0 { y2 = (y + 1) % N x2 = x } y = y2 x = x2 } return z } func print(z [][]int){ for i := range z { for j:= range z[i] { fmt.Print(z[i][j], " ") } fmt.Println("") } } func main() { var N int fmt.Scan(&N) z := doubleSliceInt(N, N) // z := make([][]int, N) // for i := 0; i < N; i++ { // z[i] = make([]int, N) // } if N%2 == 1 { z = odd(N, z) } else if N%4 == 0 { for i := 0; i < N; i++ { for j := 0; j < N; j++ { if (i%4==j%4 || i%4+j%4==3) { z[i][j] = N*i+j+1 } else { z[i][j] = N*N-(N*i+j) } } } } else{ n := (N-2)/4 seed := doubleSliceInt(2*n+1, 2*n+1) // seed := make([][]int, 2*n+1) //+1 // for i:= range seed{ // seed[i] = make([]int, 2*n+1) // } seed = odd(2*n+1, seed) LUX := doubleSliceInt(2*n+1+1, 2*n+1) // LUX := make([][]int, 2*n+1+1) //+1 // for i:= range LUX{ // LUX[i] = make([]int, 2*n+1) // } for i:=0; i<2*n+1; i++{ LUX[(2*n+1)/2+1][i] = 1 } for i:=(2*n+1)/2+2; i<(2*n+1)+1; i++{ for j:=0; j<(2*n+1); j++{ LUX[i][j] = 2 } } //print(LUX) LUX[N/4][N/4] = 1 LUX[1 + N/4][N/4] = 0 //print(LUX) L := [2][2]int{{4,1},{2,3}} U := [2][2]int{{1,4},{2,3}} X := [2][2]int{{1,4},{3,2}} LUXmat := [3][2][2]int{L,U,X} for x:=0; x