Open In App

Program to convert given Matrix to a Diagonal Matrix

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a N*N matrix. The task is to convert the matrix to a diagonal matrix. That is to change the values of the non-diagonal elements of a matrix to 0.
Diagonal-Matrix: A matrix is called a Diagonal Matrix if all the non-diagonal elements of the matrix are zero.
Examples: 
 

Input : mat[][] = {{ 2, 1, 7 },
                   { 3, 7, 2 },
                   { 5, 4, 9 }}
Output : {{2, 0, 7},
          {0, 7, 0},
          {5, 0, 9}}

Input :  mat[][] = {{1, 3, 5, 6, 7},
                    {3, 5, 3, 2, 1},
                    {1, 2, 3, 4, 5},
                    {7, 9, 2, 1, 6},
                    {9, 1, 5, 3, 2}}
Output : {{1, 0, 0, 0, 7},
          {0, 5, 0, 2, 0},
          {0, 0, 3, 0, 0},
          {0, 9, 0, 1, 0},
          {9, 0, 0, 0, 2}}

 

Traverse all the non-diagonal elements of the matrix using two nested loops as shown in the below code and make them zero.
Below is the program to make all non-diagonal elements of a matrix zero: 
 

C++




// C++ program to change the value of
// non-diagonal elements of a matrix to 0
 
#include <iostream>
using namespace std;
 
const int MAX = 100;
 
// Function to print the resultant matrix
void print(int mat[][MAX], int n, int m)
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << mat[i][j] << " ";
        }
        cout << endl;
    }
}
 
// Function to change the values of all
// non-diagonal elements to 0
void makenondiagonalzero(int mat[][MAX], int n, int m)
{
    // Traverse all non-diagonal elements
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (i != j && i + j + 1 != n)
 
                // Change all non-diagonal
                // elements to zero
                mat[i][j] = 0;
        }
    }
 
    // print resultant matrix
    print(mat, n, m);
}
 
// Driver Code
int main()
{
    int mat[][MAX] = { { 2, 1, 7 },
                       { 3, 7, 2 },
                       { 5, 4, 9 } };
 
    makenondiagonalzero(mat, 3, 3);
 
    return 0;
}


C




// C program to change the value of
// non-diagonal elements of a matrix to 0
#include <stdio.h>
#define M 100
#define N 100
 
// Function to print the resultant matrix
void print(int mat[M][N], int n, int m)
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ",mat[i][j]);
        }
        printf("\n");
    }
}
 
// Function to change the values of all
// non-diagonal elements to 0
void makenondiagonalzero(int mat[M][N], int n, int m)
{
    // Traverse all non-diagonal elements
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (i != j && i + j + 1 != n)
 
                // Change all non-diagonal
                // elements to zero
                mat[i][j] = 0;
        }
    }
 
    // print resultant matrix
    print(mat, n, m);
}
 
// Driver Code
int main()
{
    int mat[][100] = { { 2, 1, 7 },
                       { 3, 7, 2 },
                       { 5, 4, 9 } };
 
    makenondiagonalzero(mat, 3, 3);
 
    return 0;
}
 
// This code is contributed by kothvvsaakash.


Java




// Java program to change the value of
// non-diagonal elements of a matrix to 0
import java.io.*;
 
class GFG
{
static int MAX = 100;
 
// Function to print the resultant matrix
static void print(int mat[][], int n, int m)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            System.out.print( mat[i][j] + " ");
        }
        System.out.println();
    }
}
 
// Function to change the values of all
// non-diagonal elements to 0
static void makenondiagonalzero(int mat[][],
                                int n, int m)
{
    // Traverse all non-diagonal elements
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (i != j && i + j + 1 != n)
 
                // Change all non-diagonal
                // elements to zero
                mat[i][j] = 0;
        }
    }
 
    // print resultant matrix
    print(mat, n, m);
}
 
// Driver Code
public static void main (String[] args)
{
    int mat[][] = { { 2, 1, 7 },
                    { 3, 7, 2 },
                    { 5, 4, 9 } };
 
    makenondiagonalzero(mat, 3, 3);
}
}
 
// This code is contributed by inder_verma


Python3




# Python 3 program to change the value of
# non-diagonal elements of a matrix to 0
 
# Function to print the resultant matrix
def printmatrix(mat, n, m) :
     
    for i in range(n) :
        for j in range(m) :
            print(mat[i][j], end = " ")
         
        print()
 
# Function to change the values
# of all non-diagonal elements to 0
def makenondiagonalzero(mat, n, m) :
     
    # Traverse all non-diagonal elements
    for i in range(n) :
        for j in range(m) :
            if i != j and i + j + 1 != n :
                 
                # Change all non-diagonal
                # elements to zero
                mat[i][j] = 0
     
    # print resultant matrix
    printmatrix(mat, n, m)
     
# Driver code
if __name__ == "__main__" :
     
    mat = [ [2, 1, 7],
            [3, 7, 2],
            [5, 4, 9] ]
                     
    makenondiagonalzero(mat, 3, 3)
     
# This code is contributed by Ryuga


C#




// C# program to change the value
// of non-diagonal elements of a
// matrix to 0
using System;
 
class GFG
{
     
// static int MAX = 100;
 
// Function to print the resultant
// matrix
static void print(int [,]mat,
                  int n, int m)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            Console.Write(mat[i, j] + " ");
        }
        Console.WriteLine();
    }
}
 
// Function to change the values of all
// non-diagonal elements to 0
static void makenondiagonalzero(int [,]mat,
                                int n, int m)
{
    // Traverse all non-diagonal elements
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (i != j && i + j + 1 != n)
 
                // Change all non-diagonal
                // elements to zero
                mat[i, j] = 0;
        }
    }
 
    // print resultant matrix
    print(mat, n, m);
}
 
// Driver Code
public static void Main ()
{
    int [,]mat = { { 2, 1, 7 },
                   { 3, 7, 2 },
                   { 5, 4, 9 } };
 
    makenondiagonalzero(mat, 3, 3);
}
}
 
// This code is contributed by anuj_67..


PHP




<?php
// PHP program to change the value of
// non-diagonal elements of a matrix to 0
 
// Function to print the resultant matrix
function print1($mat, $n, $m)
{
    for ($i = 0; $i < $n; $i++)
    {
        for ($j = 0; $j < $m; $j++)
        {
            echo $mat[$i][$j] . " ";
        }
        echo "\n";
    }
}
 
// Function to change the values of
// all non-diagonal elements to 0
function makenondiagonalzero($mat, $n, $m)
{
    // Traverse all non-diagonal elements
    for ($i = 0; $i < $n; $i++)
    {
        for ($j = 0; $j < $m; $j++)
        {
            if ($i != $j && $i + $j + 1 != $n)
 
                // Change all non-diagonal
                // elements to zero
                $mat[$i][$j] = 0;
        }
    }
 
    // print resultant matrix
    print1($mat, $n, $m);
}
 
// Driver Code
$mat = array( array( 2, 1, 7 ),
              array( 3, 7, 2 ),
              array( 5, 4, 9 ) );
 
makenondiagonalzero($mat, 3, 3);
 
// This code is contributed
// by Arnab Kundu
?>


Javascript




<script>
// Java Script program to change the value of
// non-diagonal elements of a matrix to 0
let MAX = 100;
 
// Function to print the resultant matrix
function print(mat,n,m)
{
    for (let i = 0; i < n; i++)
    {
        for (let j = 0; j < m; j++)
        {
            document.write( mat[i][j] + " ");
        }
        document.write("<br>");
    }
}
 
// Function to change the values of all
// non-diagonal elements to 0
function makenondiagonalzero(mat,n,m)
{
    // Traverse all non-diagonal elements
    for (let i = 0; i < n; i++)
    {
        for (let j = 0; j < m; j++)
        {
            if (i != j && i + j + 1 != n)
 
                // Change all non-diagonal
                // elements to zero
                mat[i][j] = 0;
        }
    }
 
    // print resultant matrix
    print(mat, n, m);
}
 
// Driver Code
 
    let mat = [[ 2, 1, 7 ],
                    [ 3, 7, 2 ],
                    [ 5, 4, 9 ]];
 
    makenondiagonalzero(mat, 3, 3);
 
// This code is contributed by sravan kumar G
</script>


Output: 

2 0 7 
0 7 0 
5 0 9

 

Time complexity : O(n*m)

Auxiliary space: O(1) because it is using constant space, if space for input array is not considered
 



Last Updated : 13 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads