将给定矩阵转换为对角矩阵的程序
给定一个 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)