Elements of anti diagonal in python assignment expert

Elements of Anti Diagonal
Write a program to print the anti-diagonal elements in the given matrix.
Input
The first line of input will contain an integer N, denoting the number of rows and columns of the input matrix.
The next N following lines will contain N space-separated integers, denoting the elements of each row of the matrix.
Output
The output should be a list containing the anti-diagonal elements.
Explanation
For example, if the given N is 3, and the given matrix is
1 2 3
4 5 6
7 8 9
The anti diagonal elements of the above matrix are 3, 5, 7. So the output should be the list
[3, 5, 7]
Sample Input 1
3
1 2 3
4 5 6
7 8 9
Sample Output 1
[3, 5, 7]
Sample Input 2
5
44 71 46 2 15
97 21 41 69 18
78 62 77 46 63
16 92 86 21 52
71 90 86 17 96
Sample Output 2
[15, 69, 77, 92, 71]

View Discussion

Improve Article

Save Article

  • Read
  • Discuss
  • View Discussion

    Improve Article

    Save Article

    Given a square matrix of size N*N, return an array of its anti-diagonals. For better understanding let us look at the image given below:

    Examples: 

    Input :

    Elements of anti diagonal in python assignment expert

    Output :
     1
     2  5
     3  6  9
     4  7  10  13
     8  11 14
     12 15
     16

    Approach 1:
    To solve the problem mentioned above we have two major observations. 

    • The first one is, some diagonals start from the zeroth row for each column and ends when either start column >= 0 or start row < N.
    • While the second observation is that the remaining diagonals start with end column for each row and ends when either start row < N or start column >= 0.

    Below is the implementation of the above approach: 

    C++

    #include

    using namespace std;

    void diagonal(int A[3][3])

    {

        int N = 3;

        for (int col = 0; col < N; col++) {

            int startcol = col, startrow = 0;

            while (startcol >= 0 && startrow < N) {

                cout << A[startrow][startcol] << " ";

                startcol--;

                startrow++;

            }

            cout << "\n";

        }

        for (int row = 1; row < N; row++) {

            int startrow = row, startcol = N - 1;

            while (startrow < N && startcol >= 0) {

                cout << A[startrow][startcol] << " ";

                startcol--;

                startrow++;

            }

            cout << "\n";

        }

    }

    int main()

    {

        int A[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

        diagonal(A);

        return 0;

    }

    Java

    class Matrix {

        void diagonal(int A[][])

        {

            int N = 3;

            for (int col = 0; col < N; col++) {

                int startcol = col, startrow = 0;

                while (startcol >= 0 && startrow < N) {

                    System.out.print(A[startrow][startcol]

                                     + " ");

                    startcol--;

                    startrow++;

                }

                System.out.println();

            }

            for (int row = 1; row < N; row++) {

                int startrow = row, startcol = N - 1;

                while (startrow < N && startcol >= 0) {

                    System.out.print(A[startrow][startcol]

                                     + " ");

                    startcol--;

                    startrow++;

                }

                System.out.println();

            }

        }

        public static void main(String args[])

        {

            int A[][]

                = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

            Matrix m = new Matrix();

            m.diagonal(A);

        }

    }

    Python3

    def diagonal(A):

        N = 3

        for col in range(N):

            startcol = col

            startrow = 0

            while(startcol >= 0 and

                  startrow < N):

                print(A[startrow][startcol], end = " ")

                startcol -= 1

                startrow += 1

            print()

        for row in range(1, N):

            startrow = row

            startcol = N - 1

            while(startrow < N and

                  startcol >= 0):

                print(A[startrow][startcol],

                      end=" ")

                startcol -= 1

                startrow += 1

            print()

    if __name__ == "__main__":

        A = [[1, 2, 3],

             [4, 5, 6],

             [7, 8, 9]]

        diagonal(A)

    C#

    using System;

    class GFG {

        static void diagonal(int[, ] A)

        {

            int N = 3;

            for (int col = 0; col < N; col++) {

                int startcol = col, startrow = 0;

                while (startcol >= 0 && startrow < N) {

                    Console.Write(A[startrow, startcol] + " ");

                    startcol--;

                    startrow++;

                }

                Console.WriteLine();

            }

            for (int row = 1; row < N; row++) {

                int startrow = row, startcol = N - 1;

                while (startrow < N && startcol >= 0) {

                    Console.Write(A[startrow, startcol] + " ");

                    startcol--;

                    startrow++;

                }

                Console.WriteLine();

            }

        }

        public static void Main(string[] args)

        {

            int[, ] A

                = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

            diagonal(A);

        }

    }

    Javascript

            {

                document.write(A[startrow][startcol] + " ");

                startcol--;

                startrow++;

            }

            document.write("
    "
    );

        }

    }

    let A = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ];

    diagonal(A);

    Time Complexity: O(N*N), Where N is the number of rows or columns of given matrix.
    Auxiliary Space:O(1)

    Approach 2: Much simpler and concise  (Same time Complexity)

    In this approach, we will make the use of sum of indices of any element in a matrix.   Let indices of any element be represented by i (row) an j (column).

    If we find the sum of indices of any element in  a N*N matrix, we will observe that the sum of indices for any element lies between 0 (when i = j = 0) and 2*N – 2 (when i = j = N-1)

    So we will follow the following steps: 

    • Declare a vector of vectors of size 2*N – 1 for holding unique sums from sum = 0 to sum = 2*N – 2.
    • Now we will loop through the vector and pushback the elements of similar sum to same row in that vector of vectors.

    Below is the implementation of the above approach: 

    C++

    #include

    #include

    using namespace std;

    void diagonal(vectorint> >& A)

    {

        int n = A.size();

        int N = 2 * n - 1;

        vectorint> > result(N);

        for (int i = 0; i < n; i++)

            for (int j = 0; j < n; j++)

                result[i + j].push_back(A[i][j]);

        for (int i = 0; i < result.size(); i++)

        {

            cout << endl;

            for (int j = 0; j < result[i].size(); j++)

                cout << result[i][j] << " ";

        }

    }

    int main()

    {

        vectorint> > A = { { 1, 2, 3, 4 },

                                   { 5, 6, 7, 8 },

                                   { 9, 10, 11, 12 },

                                   { 13, 14, 15, 16 } };

        diagonal(A);

        return 0;

    }

    Java

    import java.util.*;

    import java.lang.*;

    class GFG{

    static void diagonal(int[][] A)

    {

        int n = A.length;

        int N = 2 * n - 1;

        ArrayList> result = new ArrayList<>();

        for(int i = 0; i < N; i++)

            result.add(new ArrayList<>());

        for(int i = 0; i < n; i++)

            for(int j = 0; j < n; j++)

                result.get(i + j).add(A[i][j]);

        for(int i = 0; i < result.size(); i++)

        {

            System.out.println();

            for(int j = 0; j < result.get(i).size(); j++)

                System.out.print(result.get(i).get(j) + " ");

        }

    }

    public static void main(String[] args)

    {

        int[][] A = { { 1, 2, 3, 4 },

                      { 5, 6, 7, 8 },

                      { 9, 10, 11, 12 },

                      { 13, 14, 15, 16 } };

        diagonal(A);

    }

    }

    Python3

    def diagonal(A) :

        n = len(A)

        N = 2 * n - 1

        result = []

        for i in range(N) :

            result.append([])

        for i in range(n) :

            for j in range(n) :

                result[i + j].append(A[i][j])

        for i in range(len(result)) :

            for j in range(len(result[i])) :

                print(result[i][j] , end = " ")

            print()

    A = [ [ 1, 2, 3, 4 ],

            [ 5, 6, 7, 8 ],

            [ 9, 10, 11, 12 ],

            [ 13, 14, 15, 16 ] ]

    diagonal(A)

    C#

    using System;

    using System.Collections.Generic;

    class GFG {

        static void diagonal(Listint>> A)

        {

            int n = A.Count;

            int N = 2 * n - 1;

            Listint>> result = new Listint>>();

            for (int i = 0; i < N; i++)

            {

                result.Add(new List<int>());

            }

            for (int i = 0; i < n; i++)

                for (int j = 0; j < n; j++)

                    result[i + j].Add(A[i][j]);

            for (int i = 0; i < result.Count; i++)

            {

                for (int j = 0; j < result[i].Count; j++)

                    Console.Write(result[i][j] + " ");

                Console.WriteLine();

            }

        }

      static void Main() {

        Listint>> A = new Listint>>();

        A.Add(new List<int> {1, 2, 3, 4});

        A.Add(new List<int> {5, 6, 7, 8});

        A.Add(new List<int> {9, 10, 11, 12});

        A.Add(new List<int> {13, 14, 15, 16});

        diagonal(A);

      }

    }

    Javascript

    Output : 

    1  
    2 5  
    3 6 9  
    4 7 10 13  
    8 11 14  
    12 15  
    16

    Time Complexity: O(N*N), Where N is the number of rows or columns of given matrix.
    Auxiliary Space:O(N*N)


    How do you find the anti diagonal elements of a matrix in python?

    We can use antidiagonal property of matrix. if (i,j) represents row and col index of cell then all cells along any antidiagonal will always have same i + j. We combine this cells to its list using map, where key is i+j.

    What is anti diagonal elements of matrix?

    In mathematics, an anti-diagonal matrix is a square matrix where all the entries are zero except those on the diagonal going from the lower left corner to the upper right corner (↗), known as the anti-diagonal (sometimes Harrison diagonal, secondary diagonal, trailing diagonal, minor diagonal, or bad diagonal).

    How do you find the diagonal in Python?

    diagonal() method, we are able to find a diagonal element from a given matrix and gives output as one dimensional matrix. Example #1 : In this example we can see that with the help of matrix. diagonal() method we are able to find the elements in a diagonal of a matrix.

    How do you find the diagonal of a sum in Python?

    Sum of diagonal of the matrix in Python.
    Matrix=[[0]*M]*M..
    sum=0..
    for i in range(M):.
    for j in range(M):.
    if i==j:.
    sum=sum+Matrix[i][j].
    elif i+j=M-1:.
    sum=sum+Matrix[i][j].