Given a matrix and the task is to check matrix is involutory matrix or not.
Involutory Matrix: A matrix is said to be involutory matrix if matrix multiply by itself return the identity matrix. Involutory matrix is the matrix that is its own inverse. The matrix A is said to be involutory matrix if A * A = I. Where I is the identity matrix.

Examples:
Input : mat[N][N] = {{1, 0, 0},
{0, -1, 0},
{0, 0, -1}}
Output : Involutory Matrix
Input : mat[N][N] = {{1, 0, 0},
{0, 1, 0},
{0, 0, 1}}
Output : Involutory Matrix
Implementation:
// Program to implement involutory matrix.
#include <bits/stdc++.h>
#define N 3
using namespace std;
// Function for matrix multiplication.
void multiply(int mat[][N], int res[][N])
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
res[i][j] = 0;
for (int k = 0; k < N; k++)
res[i][j] += mat[i][k] * mat[k][j];
}
}
}
// Function to check involutory matrix.
bool InvolutoryMatrix(int mat[N][N])
{
int res[N][N];
// multiply function call.
multiply(mat, res);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i == j && res[i][j] != 1)
return false;
if (i != j && res[i][j] != 0)
return false;
}
}
return true;
}
// Driver function.
int main()
{
int mat[N][N] = { { 1, 0, 0 },
{ 0, -1, 0 },
{ 0, 0, -1 } };
// Function call. If function return
// true then if part will execute otherwise
// else part will execute.
if (InvolutoryMatrix(mat))
cout << "Involutory Matrix";
else
cout << "Not Involutory Matrix";
return 0;
}
// Java Program to implement
// involutory matrix.
import java.io.*;
class GFG {
static int N = 3;
// Function for matrix multiplication.
static void multiply(int mat[][], int res[][])
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
res[i][j] = 0;
for (int k = 0; k < N; k++)
res[i][j] += mat[i][k] * mat[k][j];
}
}
}
// Function to check involutory matrix.
static boolean InvolutoryMatrix(int mat[][])
{
int res[][] = new int[N][N];
// multiply function call.
multiply(mat, res);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i == j && res[i][j] != 1)
return false;
if (i != j && res[i][j] != 0)
return false;
}
}
return true;
}
// Driver function.
public static void main (String[] args)
{
int mat[][] = { { 1, 0, 0 },
{ 0, -1, 0 },
{ 0, 0, -1 } };
// Function call. If function return
// true then if part will execute
// otherwise else part will execute.
if (InvolutoryMatrix(mat))
System.out.println ( "Involutory Matrix");
else
System.out.println ( "Not Involutory Matrix");
}
}
// This code is contributed by vt_m
# Program to implement involutory matrix.
N = 3;
# Function for matrix multiplication.
def multiply(mat, res):
for i in range(N):
for j in range(N):
res[i][j] = 0;
for k in range(N):
res[i][j] += mat[i][k] * mat[k][j];
return res;
# Function to check involutory matrix.
def InvolutoryMatrix(mat):
res=[[0 for i in range(N)]
for j in range(N)];
# multiply function call.
res = multiply(mat, res);
for i in range(N):
for j in range(N):
if (i == j and res[i][j] != 1):
return False;
if (i != j and res[i][j] != 0):
return False;
return True;
# Driver Code
mat = [[1, 0, 0], [0, -1, 0], [0, 0, -1]];
# Function call. If function
# return true then if part
# will execute otherwise
# else part will execute.
if (InvolutoryMatrix(mat)):
print("Involutory Matrix");
else:
print("Not Involutory Matrix");
# This code is contributed by mits
// C# Program to implement
// involutory matrix.
using System;
class GFG {
static int N = 3;
// Function for matrix multiplication.
static void multiply(int [,]mat, int [,]res)
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
res[i,j] = 0;
for (int k = 0; k < N; k++)
res[i,j] += mat[i,k] * mat[k,j];
}
}
}
// Function to check involutory matrix.
static bool InvolutoryMatrix(int [,]mat)
{
int [,]res = new int[N,N];
// multiply function call.
multiply(mat, res);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i == j && res[i,j] != 1)
return false;
if (i != j && res[i,j] != 0)
return false;
}
}
return true;
}
// Driver function.
public static void Main ()
{
int [,]mat = { { 1, 0, 0 },
{ 0, -1, 0 },
{ 0, 0, -1 } };
// Function call. If function return
// true then if part will execute
// otherwise else part will execute.
if (InvolutoryMatrix(mat))
Console.WriteLine( "Involutory Matrix");
else
Console.WriteLine( "Not Involutory Matrix");
}
}
// This code is contributed by vt_m
<?php
// Program to implement
// involutory matrix.
$N = 3;
// Function for matrix
// multiplication.
function multiply($mat, $res)
{
global $N;
for ($i = 0; $i < $N; $i++)
{
for ($j = 0; $j < $N; $j++)
{
$res[$i][$j] = 0;
for ($k = 0; $k < $N; $k++)
$res[$i][$j] += $mat[$i][$k] *
$mat[$k][$j];
}
}
return $res;
}
// Function to check
// involutory matrix.
function InvolutoryMatrix($mat)
{
global $N;
$res;
for ($i = 0; $i < $N; $i++)
for ($j = 0; $j < $N; $j++)
$res[$i][$j] = 0;
// multiply function call.
$res = multiply($mat, $res);
for ($i = 0; $i < $N; $i++)
{
for ($j = 0; $j < $N; $j++)
{
if ($i == $j &&
$res[$i][$j] != 1)
return false;
if ($i != $j &&
$res[$i][$j] != 0)
return false;
}
}
return true;
}
// Driver Code
$mat = array(array(1, 0, 0),
array(0, -1, 0),
array(0, 0, -1));
// Function call. If function
// return true then if part
// will execute otherwise
// else part will execute.
if (InvolutoryMatrix($mat))
echo "Involutory Matrix";
else
echo "Not Involutory Matrix";
// This code is contributed by mits
?>
<script>
// Javascript to implement involutory matrix.
var N = 3;
// Function for matrix multiplication.
function multiply(mat, res)
{
for(var i = 0; i < N; i++)
{
for(var j = 0; j < N; j++)
{
res[i][j] = 0;
for(var k = 0; k < N; k++)
res[i][j] += mat[i][k] * mat[k][j];
}
}
}
// Function to check involutory matrix.
function InvolutoryMatrix(mat)
{
var res = Array(N).fill(0).map(
x => Array(N).fill(0));
// Multiply function call.
multiply(mat, res);
for(var i = 0; i < N; i++)
{
for(var j = 0; j < N; j++)
{
if (i == j && res[i][j] != 1)
return false;
if (i != j && res[i][j] != 0)
return false;
}
}
return true;
}
// Driver code
var mat = [ [ 1, 0, 0 ],
[ 0, -1, 0 ],
[ 0, 0, -1 ] ];
// Function call. If function return
// true then if part will execute
// otherwise else part will execute.
if (InvolutoryMatrix(mat))
document.write("Involutory Matrix");
else
document.write("Not Involutory Matrix");
// This code is contributed by 29AjayKumar
</script>
Output
Involutory Matrix
Time Complexity: O(n3)
Auxiliary Space: O(n2), since n2 extra space has been taken.