📜  在 O(N) 时间内打印矩阵对角线的程序

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

在 O(N) 时间内打印矩阵对角线的程序

给定一个二维方阵,任务是以 O(N) 的时间复杂度打印该矩阵的主对角线和辅助对角线。对于 O(N 2 ) 时间,请参考这篇文章。

例子:

Input: 
4
1 2 3 4
4 3 2 1
7 8 9 6
6 5 4 3
Output:
Principal Diagonal: 1, 3, 9, 3
Secondary Diagonal: 4, 2, 8, 6

Input:
3
1 1 1
1 1 1
1 1 1
Output:
Principal Diagonal: 1, 1, 1
Secondary Diagonal: 1, 1, 1

方法:

1. 考虑以下 4 X 4 输入矩阵。

A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33

2.主对角线由元素A00、A11、A22、A33组成。



主对角线的条件:

The row-column condition is row = column.

3.次对角线由元素A03、A12、A21、A30组成。

次对角线的条件:

The row-column condition is row = numberOfRows - column - 1.

在这种方法中,我们使用一个循环,即一个循环,按照以下公式查找对角线元素:

principal diagonal = matrix[i][i];
secondary diagonal = matrix[i][n - i - 1];

where 0 <= i <= n

下面是上述方法的实现:

C++
// C++ Program to print the Diagonals of a Matrix
 
#include 
using namespace std;
 
const int MAX = 100;
 
// Function to print the Principal Diagonal
void printPrincipalDiagonal(int mat[][MAX], int n)
{
    cout << "Principal Diagonal: ";
 
    for (int i = 0; i < n; i++) {
 
        // Condition for principal diagonal
        cout << mat[i][i] << ", ";
    }
    cout << endl;
}
 
// Function to print the Secondary Diagonal
void printSecondaryDiagonal(int mat[][MAX], int n)
{
    cout << "Secondary Diagonal: ";
 
    for (int i = 0; i < n; i++) {
 
        // Condition for secondary diagonal
        cout << mat[i][n - i - 1] << ", ";
    }
 
    cout << endl;
}
 
// Driver code
int main()
{
    int n = 4;
    int a[][MAX] = { { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 },
                     { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 } };
 
    printPrincipalDiagonal(a, n);
    printSecondaryDiagonal(a, n);
    return 0;
}


Java
// Java Program to print the Diagonals of a Matrix
class GFG
{
     
    static final int MAX = 100;
     
    // Function to print the Principal Diagonal
    static void printPrincipalDiagonal(int mat[][], int n)
    {
        System.out.print("Principal Diagonal: ");
     
        for (int i = 0; i < n; i++)
        {
     
            // Condition for principal diagonal
            System.out.print(mat[i][i] + ", ");
        }
        System.out.println();
    }
     
    // Function to print the Secondary Diagonal
    static void printSecondaryDiagonal(int mat[][], int n)
    {
        System.out.print("Secondary Diagonal: ");
     
        for (int i = 0; i < n; i++)
        {
     
            // Condition for secondary diagonal
            System.out.print(mat[i][n - i - 1] + ", ");
        }
     
        System.out.println();
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 4;
        int a[][] = { { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 },
                        { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 } };
     
        printPrincipalDiagonal(a, n);
        printSecondaryDiagonal(a, n);
    }
}
 
// This code is contributed by AnkitRai01


Python3
# Python Program to print the Diagonals of a Matrix
MAX = 100;
 
# Function to print the Principal Diagonal
def printPrincipalDiagonal(mat, n):
    print("Principal Diagonal: ", end = "");
 
    for i in range(n):
 
        # Condition for principal diagonal
        print(mat[i][i], end= ", ");
     
    print();
 
# Function to print the Secondary Diagonal
def printSecondaryDiagonal(mat, n):
    print("Secondary Diagonal: ", end = "");
 
    for i in range(n):
 
        # Condition for secondary diagonal
        print(mat[i][n - i - 1], end = ", ");
     
    print();
 
# Driver code
if __name__ == '__main__':
    n = 4;
    a = [[ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ],
        [ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ]];
 
    printPrincipalDiagonal(a, n);
    printSecondaryDiagonal(a, n);
 
# This code is contributed by PrinciRaj1992


C#
// C# Program to print the Diagonals of a Matrix
using System;
 
class GFG
{
     
    // Function to print the Principal Diagonal
    static void printPrincipalDiagonal(int [,]mat, int n)
    {
        Console.Write("Principal Diagonal: ");
     
        for (int i = 0; i < n; i++)
        {
     
            // Condition for principal diagonal
            Console.Write(mat[i, i] + ", ");
        }
        Console.WriteLine();
    }
     
    // Function to print the Secondary Diagonal
    static void printSecondaryDiagonal(int [,]mat, int n)
    {
        Console.Write("Secondary Diagonal: ");
     
        for (int i = 0; i < n; i++)
        {
     
            // Condition for secondary diagonal
            Console.Write(mat[i, n - i - 1] + ", ");
        }
     
        Console.WriteLine();
    }
     
    // Driver code
    public static void Main()
    {
        int n = 4;
        int [,]a = { { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 },
                     { 1, 2, 3, 4 },
                     { 5, 6, 7, 8 } };
     
        printPrincipalDiagonal(a, n);
        printSecondaryDiagonal(a, n);
    }
}
 
// This code is contributed by AnkitRai01


Javascript


输出:
Principal Diagonal: 1, 6, 3, 8, 
Secondary Diagonal: 4, 7, 2, 5,

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程