📜  将给定矩阵转换为对角矩阵的程序

📅  最后修改于: 2022-05-13 01:57:21.526000             🧑  作者: Mango

将给定矩阵转换为对角矩阵的程序

给定一个 N*N 矩阵。任务是将矩阵转换为对角矩阵。即把矩阵的非对角元素的值改为0。
对角矩阵:如果矩阵的所有非对角元素都为零,则该矩阵称为对角矩阵。
例子:

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

使用两个嵌套循环遍历矩阵的所有非对角元素,如下面的代码所示,并使它们为零。
下面是使矩阵的所有非对角元素为零的程序:

C++
// C++ program to change the value of
// non-diagonal elements of a matrix to 0
 
#include 
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;
}


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


Javascript


输出:
2 0 7 
0 7 0 
5 0 9

时间复杂度: O(n*m)