Рубрики

Матрица печати в стиле заг-заг

Дана матрица двумерного массива из n строк и m столбцов. Распечатайте эту матрицу в режиме ZIG-ZAG, как показано на рисунке.

Пример:

Input: 
1 2 3
4 5 6
7 8 9
Output: 
1 2 4 7 5 3 6 8 9

Подход кода C ++
Подход прост. Просто переберите все диагональные элементы по одному и измените направление в соответствии с предыдущим соответствием.

Подход кода Python3
Этот подход прост. При перемещении матрицы обычным способом, на основе четности суммы индексов элемента, добавьте этот конкретный элемент в список либо в начале, либо в конце, если сумма i и j либо четная, либо нечетная соответственно , Распечатайте список решений как есть.

C ++

/ * C ++ Программа для печати матрицы в виде зигзага * /
#include <iostream>

using namespace std;

#define C 3

  
// Утилита для печати матрицы
// в зигзагообразной форме

void zigZagMatrix(int arr[][C], int n, int m)

{

    int row = 0, col = 0;

  

    // Булева переменная, которая будет истинна, если мы

    // в противном случае нужно увеличить значение 'row'

    // false- если увеличить значение 'col'

    bool row_inc = 0;

  

    // Распечатать матрицу нижней половины зигзагообразного узора

    int mn = min(m, n);

    for (int len = 1; len <= mn; ++len) {

        for (int i = 0; i < len; ++i) {

            cout << arr[row][col] << " ";

  

            if (i + 1 == len)

                break;

            // Если значение row_increment равно true

            // увеличиваем строку и уменьшаем кол

            // еще декремент строки и приращения

            // кол

            if (row_inc)

                ++row, --col;

            else

                --row, ++col;

        }

  

        if (len == mn)

            break;

  

        // Обновляем значение строки или столбца в соответствии с

        // до последнего приращения

        if (row_inc)

            ++row, row_inc = false;

        else

            ++col, row_inc = true;

    }

  

    // Обновляем индексы переменных row и col

    if (row == 0) {

        if (col == m - 1)

            ++row;

        else

            ++col;

        row_inc = 1;

    }

    else {

        if (row == n - 1)

            ++col;

        else

            ++row;

        row_inc = 0;

    }

  

    // Распечатать следующую половину зигзагообразного узора

    int MAX = max(m, n) - 1;

    for (int len, diag = MAX; diag > 0; --diag) {

  

        if (diag > mn)

            len = mn;

        else

            len = diag;

  

        for (int i = 0; i < len; ++i) {

            cout << arr[row][col] << " ";

  

            if (i + 1 == len)

                break;

  

            // Обновляем значение строки или столбца в соответствии с

            // до последнего приращения

            if (row_inc)

                ++row, --col;

            else

                ++col, --row;

        }

  

        // Обновляем индексы переменных row и col

        if (row == 0 || col == m - 1) {

            if (col == m - 1)

                ++row;

            else

                ++col;

  

            row_inc = true;

        }

  

        else if (col == 0 || row == n - 1) {

            if (row == n - 1)

                ++col;

            else

                ++row;

  

            row_inc = false;

        }

    }

}

  
// Код драйвера

int main()

{

    int matrix[][3] = { { 1, 2, 3 },

                        { 4, 5, 6 },

                        { 7, 8, 9 } };

    zigZagMatrix(matrix, 3, 3);

  

    return 0;

}

Джава

/ * Java-программа для печати матрицы в виде зигзага * /

class GFG {

  static final int C = 3;

  

  // Утилита для печати матрицы

  // в зигзагообразной форме

  static void zigZagMatrix(int arr[][], int n, int m) {

    int row = 0, col = 0;

  

    // Булева переменная, которая будет истинна, если мы

    // в противном случае нужно увеличить значение 'row'

    // false- если увеличить значение 'col'

    boolean row_inc = false;

  

    // Распечатать матрицу нижней половины зигзагообразного узора

    int mn = Math.min(m, n);

    for (int len = 1; len <= mn; ++len) {

      for (int i = 0; i < len; ++i) {

        System.out.print(arr[row][col] + " ");

  

        if (i + 1 == len)

          break;

        // Если значение row_increment равно true

        // увеличиваем строку и уменьшаем кол

        // еще декремент строки и приращения

        // кол

        if (row_inc) {

          ++row;

          --col;

        } else {

          --row;

          ++col;

        }

      }

  

      if (len == mn)

        break;

  

      // Обновление строки или столбца в соответствии с

      // до последнего приращения

      if (row_inc) {

        ++row;

        row_inc = false;

      } else {

        ++col;

        row_inc = true;

      }

    }

  

    // Обновляем индексы переменных row и col

    if (row == 0) {

      if (col == m - 1)

        ++row;

      else

        ++col;

      row_inc = true;

    } else {

      if (row == n - 1)

        ++col;

      else

        ++row;

      row_inc = false;

    }

  

    // Распечатать следующую половину зигзагообразного узора

    int MAX = Math.max(m, n) - 1;

    for (int len, diag = MAX; diag > 0; --diag) {

  

      if (diag > mn)

        len = mn;

      else

        len = diag;

  

      for (int i = 0; i < len; ++i) {

        System.out.print(arr[row][col] + " ");

  

        if (i + 1 == len)

          break;

  

        // Обновляем значение строки или столбца в соответствии с

        // до последнего приращения

        if (row_inc) {

          ++row;

          --col;

        } else {

          ++col;

          --row;

        }

      }

  

      // Обновляем индексы переменных row и col

      if (row == 0 || col == m - 1) {

        if (col == m - 1)

          ++row;

        else

          ++col;

  

        row_inc = true;

      }

  

      else if (col == 0 || row == n - 1) {

        if (row == n - 1)

          ++col;

        else

          ++row;

  

        row_inc = false;

      }

    }

  }

  // Код драйвера

  public static void main(String[] args) {

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

    zigZagMatrix(matrix, 3, 3);

  }

}
// Этот код предоставлен Anant Agarwal.

python3

# Программа для печати матрицы в зигзагообразном узоре

  

matrix =[

            [ 1, 2, 3,],

            [ 4, 5, 6 ],

            [ 7, 8, 9 ],

        ]

rows=3

columns=3

    

solution=[[] for i in range(rows+columns-1)]

  

for i in range(rows):

    for j in range(columns):

        sum=i+j

        if(sum%2 ==0):

  

            # добавить в начале

            solution[sum].insert(0,matrix[i][j])

        else:

  

            # добавить в конец списка

            solution[sum].append(matrix[i][j])

          

              
# распечатать решение как оно есть

for i in solution:

    for j in i:

        print(j,end=" ")

          

  

       

C #

// C # Программа для печати матрицы
// в зигзагообразном узоре

using System;

  

class GFG {

    static int C = 3;

  

    // Утилита для печати

    // матрица в зигзагообразной форме

    static void zigZagMatrix(int[, ] arr, int n, int m)

    {

        int row = 0, col = 0;

  

        // Булева переменная, которая будет

        // истина, если нам нужно увеличить

        // значение 'row' в противном случае false-

        // если увеличить значение 'col'

        bool row_inc = false;

  

        // Распечатать матрицу нижней половины

        // зигзагообразный рисунок

        int mn = Math.Min(m, n);

        for (int len = 1; len <= mn; ++len) {

                for (int i = 0; i < len; ++i) {

  

                Console.Write(arr[row, col] + " ");

  

                if (i + 1 == len)

                    break;

  

                // Если значение row_increment равно true

                // увеличиваем строку и уменьшаем кол

                // еще декремент строки и приращения

                // кол

                if (row_inc) {

                    ++row;

                    --col;

                }

                else {

                    --row;

                    ++col;

                }

            }

  

            if (len == mn)

                break;

  

            // Обновление строки или столбца

            // в соответствии с последним

            // приращение

            if (row_inc) {

                    ++row;

                    row_inc = false;

            }

            else {

                ++col;

                row_inc = true;

            }

        }

  

        // Обновляем индексы строки

        // и переменная col

        if (row == 0) {

            if (col == m - 1)

                ++row;

            else

                ++col;

            row_inc = true;

        }

        else {

            if (row == n - 1)

                ++col;

            else

                ++row;

            row_inc = false;

        }

  

        // Распечатать следующую половину

        // зигзагообразный рисунок

        int MAX = Math.Max(m, n) - 1;

        for (int len, diag = MAX; diag > 0; --diag) {

  

            if (diag > mn)

                    len = mn;

            else

                len = diag;

  

            for (int i = 0; i < len; ++i) {

                    Console.Write(arr[row, col] + " ");

  

                if (i + 1 == len)

                    break;

  

                // Обновить значение строки или столбца

                // в соответствии с последним

                // приращение

                if (row_inc) {

                        ++row;

                        --col;

                }

                else {

                    ++col;

                    --row;

                }

            }

  

            // Обновляем индексы

            // переменная row и col

            if (row == 0 || col == m - 1) {

                if (col == m - 1)

                    ++row;

                else

                    ++col;

  

                row_inc = true;

            }

  

            else if (col == 0 || row == n - 1) {

                if (row == n - 1)

                    ++col;

                else

                    ++row;

  

                row_inc = false;

            }

        }

    }

  

    // Код драйвера

    public static void Main()

    {

        int[, ] matrix = { { 1, 2, 3 },

                        { 4, 5, 6 },

                        { 7, 8, 9 } };

        zigZagMatrix(matrix, 3, 3);

    }

}

  
// Этот код предоставлен vt_m.

PHP

<?php
// PHP программа для печати
// матрица в зигзагообразном узоре

$C = 3;

  
// Вспомогательная функция
// напечатать матрицу
// в зигзагообразной форме

function zigZagMatrix($arr,

                      $n, $m)

{

    $row = 0; $col = 0;

  

    // Булева переменная, которая

    // будет истина, если нам нужно

    // чтобы увеличить 'строку'

    // значение иначе false-

    // если увеличить значение 'col'

    $row_inc = false;

  

    // Печать матрицы нижнего

    // наполовину зигзагообразный рисунок

    $mn = min($m, $n);

    for ($len = 1; 

         $len <= $mn; $len++) 

    {

        for ($i = 0; 

             $i < $len; $i++) 

        {

            echo ($arr[$row][$col]." ");

  

            if ($i + 1 == $len)

                break;

                  

            // Если значение row_increment

            // истинная строка приращения

            // и уменьшаем col

            // декремент строки и

            // увеличиваем col

            if ($row_inc)

            {

                $row++; $col--;

            }

            else

            {

                $row--; $col++;

            }

        }

  

        if ($len == $mn)

            break;

  

        // Обновить строку или столбец

        // значение в соответствии

        // до последнего приращения

        if ($row_inc

        {

            ++$row; $row_inc = false;

        }

        else 

        {

            ++$col; $row_inc = true;

        }

    }

  

    // Обновляем индексы

    // переменная row и col

    if ($row == 0) 

    {

        if ($col == $m - 1)

            ++$row;

        else

            ++$col;

        $row_inc = 1;

    }

    else 

    {

        if ($row == $n - 1)

            ++$col;

        else

            ++$row;

        $row_inc = 0;

    }

  

    // Распечатать следующую половину

    // зигзагообразный рисунок

    $MAX = max($m, $n) - 1;

    for ($len, $diag = $MAX;

         $diag > 0; --$diag

    {

        if ($diag > $mn)

            $len = $mn;

        else

            $len = $diag;

  

        for ($i = 0; 

             $i < $len; ++$i)

        {

            echo($arr[$row][$col] . " ");

  

            if ($i + 1 == $len)

                break;

  

            // Обновить строку или столбец

            // значение согласно

            // последний прирост

            if ($row_inc)

            {

                ++$row; --$col;

            }

            else

            {

                ++$col; --$row;

            }

        }

  

        // Обновляем индексы

        // переменная row и col

        if ($row == 0 || 

            $col == $m - 1) 

        {

            if ($col == $m - 1)

                ++$row;

            else

                ++$col;

  

            $row_inc = true;

        }

  

        else if ($col == 0 || 

                 $row == $n - 1) 

        {

            if ($row == $n - 1)

                ++$col;

            else

                ++$row;

  

            $row_inc = false;

        }

    }

}

  
// Код драйвера

$matrix = array(array(1, 2, 3),

                array(4, 5, 6),

                array(7, 8, 9));

                  

zigZagMatrix($matrix, 3, 3);

  
// Этот код предоставлен
// Маниш Шоу (manishshaw1)
?>


Выход:

1 2 4 7 5 3 6 8 9 

Временная сложность: O (n * m)
Вспомогательное пространство: O (1)

Рекомендуемые посты:

Матрица печати в стиле заг-заг

0.00 (0%) 0 votes