fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. ios::sync_with_stdio(0), cin.tie(0);
  6. int N; cin >> N;
  7. if (N <= 2) {
  8. cout << -1 << '\n';
  9. exit(0);
  10. }
  11.  
  12. if (N == 3) {
  13. cout << " 8 6 3\n";
  14. cout << " 7 1 9\n";
  15. cout << " 5 4 2\n";
  16. exit(0);
  17. }
  18.  
  19. vector<vector<int>> G(N, vector<int>(N));
  20. G[0][0] = 13; G[0][1] = 8; G[0][2] = 16; G[0][3] = 2;
  21. G[1][0] = 14; G[1][1] = 1; G[1][2] = 11; G[1][3] = 10;
  22. G[2][0] = 7; G[2][1] = 5; G[2][2] = 9; G[2][3] = 15;
  23. G[3][0] = 4; G[3][1] = 3; G[3][2] = 6; G[3][3] = 12;
  24.  
  25. for (int i = 0; i < 4; i++) {
  26. for (int j = 0; j < 4; j++) {
  27. G[i][j] += N*N - 16;
  28. }
  29. }
  30.  
  31. int idx = 0;
  32. for (int i = 4; i < N; i++) {
  33. if (i % 4 == 0) {
  34. for (int j = 0; j < i; j++) {
  35. G[j][i] = ++idx;
  36. }
  37. for (int j = i; j >= 0; j--) {
  38. G[i][j] = ++idx;
  39. }
  40. if (i == N-1) {
  41. swap(G[i][0], G[i][1]);
  42. }
  43. } else {
  44. for (int j = 0; j < i; j++) {
  45. G[i][j] = ++idx;
  46. }
  47. for (int j = i; j >= 0; j--) {
  48. G[j][i] = ++idx;
  49. }
  50. if (i == N-1) {
  51. swap(G[0][i], G[1][i]);
  52. }
  53. }
  54. }
  55.  
  56. for (int i = 0; i < N; i++) {
  57. for (int j = 0; j < N; j++) {
  58. cout << G[i][j] << " \n"[j+1==N];
  59. }
  60. }
  61.  
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0s 4356KB
stdin
5
stdout
22 17 25 11 1
23 10 20 19 2
16 14 18 24 3
13 12 15 21 4
8 9 7 6 5