# Construct a square Matrix whose parity of diagonal sum is same as size of matrix

Last Updated : 31 Jan, 2022

Given an integer N representing the size of the matrix, the task is to construct a square matrix N * N which have an element from 1 to N2 such that the parity of the sum of its diagonals is equal to the parity of integer N.

Examples:

Input: N = 4
Output:
1   2   3   4
8   7   6   5
9  10  11 12
16 15 14 13
Explanation:
Sum of diagonal = 32 and 36 and integer N = 4, all the numbers are even that is same parity.

Input: N = 3
Output:
1 2 3
6 5 4
7 8 9
Explanation:
Sum of diagonal = 15 and integer N = 3, all the numbers are odd that is same parity.

Approach: The idea is to observe that on filling the elements in the matrix in an alternative fashion the parity of N and the sum of diagonals is the same. Start the counter from 1 and then fill the first row from 0 to N – 1 in increasing order, then fill the second row from index N – 1 to 0, and so on. Keep filling each element from value 1 to N2 in this alternate fashion to get the required matrix.
Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include` `using` `namespace` `std;`   `// Function to construct a N * N` `// matrix based on the given condition` `void` `createMatrix(``int` `N)` `{` `    ``// Matrix with given sizM` `    ``int` `M[N][N];`   `    ``// Counter to insert elements` `    ``// from 1 to N * N` `    ``int` `count = 1;` `    ``for` `(``int` `i = 0; i < N; i++) {`   `        ``// Check if it is first row` `        ``// or odd row of the matrix` `        ``if` `(i % 2 == 0) {`   `            ``for` `(``int` `j = 0; j < N; j++) {` `                ``M[i][j] = count;` `                ``count++;` `            ``}` `        ``}` `        ``else` `        ``{` `            ``// Insert elements from` `            ``// right to left` `            ``for` `(``int` `j = N - 1;j >= 0; j--){` `                ``M[i][j] = count;` `                ``count += 1;` `            ``}` `        ``}` `    ``}`   `    ``// Print the matrix` `    ``for` `(``int` `i = 0; i < N; i++) {`   `        ``// Traverse column` `        ``for` `(``int` `j = 0; j < N; j++) {` `            ``cout << M[i][j] << ``" "``;` `        ``}` `        ``cout << endl;` `    ``}` `}`   `// Driver Code` `int` `main()` `{` `    ``// Given size of matrix N` `    ``int` `N = 3;`   `    ``// Function Call` `    ``createMatrix(N);` `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `class` `GFG{` ` `  `// Function to construct a N * N` `// matrix based on the given condition` `static` `void` `createMatrix(``int` `N)` `{` `    ``// Matrix with given sizM` `    ``int` `M[][] = ``new` `int``[N][N];` ` `  `    ``// Counter to insert elements` `    ``// from 1 to N * N` `    ``int` `count = ``1``;` `    ``for` `(``int` `i = ``0``; i < N; i++) ` `    ``{` ` `  `        ``// Check if it is first row` `        ``// or odd row of the matrix` `        ``if` `(i % ``2` `== ``0``)` `        ``{` ` `  `            ``for` `(``int` `j = ``0``; j < N; j++)` `            ``{` `                ``M[i][j] = count;` `                ``count++;` `            ``}` `        ``}` `        ``else` `        ``{` `            ``// Insert elements from` `            ``// right to left` `            ``for``(``int` `j = N - ``1``; j >= ``0``; j--){` `                ``M[i][j] = count;` `                ``count += ``1` `;` `            ``}` `        ``}` `    ``}` ` `  `    ``// Print the matrix` `    ``for` `(``int` `i = ``0``; i < N; i++) ` `    ``{` ` `  `        ``// Traverse column` `        ``for` `(``int` `j = ``0``; j < N; j++)` `        ``{` `            ``System.out.print(M[i][j] + ``" "``);` `        ``}` `        ``System.out.println();` `    ``}` `}` ` `  `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `    ``// Given size of matrix N` `    ``int` `N = ``3``;` ` `  `    ``// Function Call` `    ``createMatrix(N);` `}` `}`   `// This code is contributed by Ritik Bansal`

## Python3

 `# Python3 program for the above approach`   `# Function to construct a N * N` `# matrix based on the given condition` `def` `createMatrix(N):` `    `  `    ``# Matrix with given size` `    ``M ``=` `[[``0``] ``*` `N ``for` `i ``in` `range``(N)]`   `    ``# Counter to insert elements` `    ``# from 1 to N * N` `    ``count ``=` `1` `    `  `    ``for` `i ``in` `range``(N):`   `        ``# Check if it is first row` `        ``# or odd row of the matrix` `        ``if` `(i ``%` `2` `=``=` `0``):` `            ``for` `j ``in` `range``(N):`   `                ``# Insert elements from` `                ``# left to right` `                ``M[i][j] ``=` `count` `                ``count ``+``=` `1`   `        ``# Condition if it is second` `        ``# row or even row` `        ``else``:`   `            ``# Insert elements from` `            ``# right to left` `            ``for` `j ``in` `range``(N ``-` `1``, ``-``1``, ``-``1``):` `                ``M[i][j] ``=` `count` `                ``count ``+``=` `1`   `    ``# Print the matrix` `    ``for` `i ``in` `range``(N):`   `        ``# Traverse column` `        ``for` `j ``in` `range``(N):` `            ``print``(M[i][j], end ``=` `" "``)`   `        ``print``()`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    `  `    ``# Given size of matrix N` `    ``N ``=` `3`   `    ``# Function call` `    ``createMatrix(N)`   `# This code is contributed by mohit kumar 29`

## C#

 `// C# program for ` `// the above approach` `using` `System;` `class` `GFG{` ` `  `// Function to construct a N * N` `// matrix based on the given condition` `static` `void` `createMatrix(``int` `N)` `{` `  ``// Matrix with given sizM` `  ``int``[,] M = ``new` `int``[N, N];`   `  ``// Counter to insert elements` `  ``// from 1 to N * N` `  ``int` `count = 1;` `  ``for` `(``int` `i = 0; i < N; i++) ` `  ``{` `    ``// Check if it is first row` `    ``// or odd row of the matrix` `    ``if` `(i % 2 == 0)` `    ``{`   `      ``for` `(``int` `j = 0; j < N; j++) ` `      ``{` `        ``M[i, j] = count;` `        ``count++;` `      ``}` `    ``}` `    ``else` `    ``{` `      ``// Insert elements from` `      ``// right to left` `      ``for``(``int` `j = N - 1; j >= 0; j--)` `      ``{` `        ``M[i, j] = count;` `        ``count += 1;` `      ``}` `    ``}` `  ``}`   `  ``// Print the matrix` `  ``for` `(``int` `i = 0; i < N; i++) ` `  ``{` `    ``// Traverse column` `    ``for` `(``int` `j = 0; j < N; j++)` `    ``{` `      ``Console.Write(M[i, j] + ``" "``);` `    ``}` `    ``Console.WriteLine();` `  ``}` `}` ` `  `// Driver Code` `public` `static` `void` `Main()` `{` `  ``// Given size of matrix N` `  ``int` `N = 3;`   `  ``// Function Call` `  ``createMatrix(N);` `}` `}`   `// This code is contributed by Chitranayal`

## Javascript

 ``

Output:

```1 2 3
6 5 4
7 8 9```

Time Complexity: O(N*N)
Auxiliary Space: O(1)