Program to convert given Matrix to a Diagonal Matrix

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 of 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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..

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right


Output:

2 0 7 
0 7 0 
5 0 9

Time complexity : O(n*m)



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.