Рубрики

Распечатать данную матрицу в виде спирали

Учитывая двумерный массив, распечатайте его в виде спирали. Смотрите следующие примеры.

Примеры:

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


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

Подход: вышеуказанную проблему можно решить, используя четыре цикла for, которые печатают все элементы. Каждый цикл for определяет движение в одном направлении вместе с матрицей. Первый цикл for представляет движение слева направо, в то время как второй обход представляет движение сверху вниз, третий представляет движение справа налево, а четвертый представляет движение снизу вверх. Четыре переменных вместе с их использованием приведены ниже.

k - starting row index 
m - ending row index 
l - starting column index 
n - ending column index 

Ниже приведена реализация вышеуказанного подхода:

C ++

#include <bits/stdc++.h>

using namespace std;

#define R 3
#define C 6

  

void spiralPrint(int m, int n, int a[R][C])

{

    int i, k = 0, l = 0;

  

    / * k - начальный индекс строки

        m - индекс конца строки

        l - начальный индекс столбца

        n - индекс конечного столбца

        я - итератор

    * /

  

    while (k < m && l < n) {

        / * Вывести первый ряд из

               остальные строки * /

        for (i = l; i < n; ++i) {

            cout << a[k][i] << " ";

        }

        k++;

  

        / * Распечатать последний столбец

         из оставшихся столбцов * /

        for (i = k; i < m; ++i) {

            cout << a[i][n - 1] << " ";

        }

        n--;

  

        / * Вывести последний ряд из

                остальные строки * /

        if (k < m) {

            for (i = n - 1; i >= l; --i) {

                cout << a[m - 1][i] << " ";

            }

            m--;

        }

  

        / * Вывести первый столбец из

                   остальные столбцы * /

        if (l < n) {

            for (i = m - 1; i >= k; --i) {

                cout << a[i][l] << " ";

            }

            l++;

        }

    }

}

  
/ * Программа драйвера для проверки вышеуказанных функций * /

int main()

{

    int a[R][C] = { { 1, 2, 3, 4, 5, 6 },

                    { 7, 8, 9, 10, 11, 12 },

                    { 13, 14, 15, 16, 17, 18 } };

  

    spiralPrint(R, C, a);

    return 0;

}

  
// Это код, предоставленный rathbhupendra

С

/ * Этот код принят из решения, данного

   @ http: // effprog.blogspot.com/2011/01/spiral-printing-of-two-dimensional.html * /

  
#include <stdio.h>
#define R 3
#define C 6

  

void spiralPrint(int m, int n, int a[R][C])

{

    int i, k = 0, l = 0;

  

    / * k - начальный индекс строки

        m - индекс конца строки

        l - начальный индекс столбца

        n - индекс конечного столбца

        я - итератор

    * /

  

    while (k < m && l < n) {

        / * Вывести первую строку из оставшихся строк * /

        for (i = l; i < n; ++i) {

            printf("%d ", a[k][i]);

        }

        k++;

  

        / * Распечатать последний столбец из оставшихся столбцов * /

        for (i = k; i < m; ++i) {

            printf("%d ", a[i][n - 1]);

        }

        n--;

  

        / * Вывести последнюю строку из оставшихся строк * /

        if (k < m) {

            for (i = n - 1; i >= l; --i) {

                printf("%d ", a[m - 1][i]);

            }

            m--;

        }

  

        / * Распечатать первый столбец из оставшихся столбцов * /

        if (l < n) {

            for (i = m - 1; i >= k; --i) {

                printf("%d ", a[i][l]);

            }

            l++;

        }

    }

}

  
/ * Программа драйвера для проверки вышеуказанных функций * /

int main()

{

    int a[R][C] = { { 1, 2, 3, 4, 5, 6 },

                    { 7, 8, 9, 10, 11, 12 },

                    { 13, 14, 15, 16, 17, 18 } };

  

    spiralPrint(R, C, a);

    return 0;

}

Джава

// Java-программа для печати заданной матрицы в спиральной форме

import java.io.*;

  

class GFG {

    // Функция печати матрицы в виде спирали

    static void spiralPrint(int m, int n, int a[][])

    {

        int i, k = 0, l = 0;

        / * k - начальный индекс строки

        m - индекс конца строки

        l - начальный индекс столбца

        n - индекс конечного столбца

        я - итератор

        * /

  

        while (k < m && l < n) {

            // Распечатать первую строку из оставшихся строк

            for (i = l; i < n; ++i) {

                System.out.print(a[k][i] + " ");

            }

            k++;

  

            // Распечатать последний столбец из оставшихся столбцов

            for (i = k; i < m; ++i) {

                System.out.print(a[i][n - 1] + " ");

            }

            n--;

  

            // Распечатать последнюю строку из оставшихся строк * /

            if (k < m) {

                for (i = n - 1; i >= l; --i) {

                    System.out.print(a[m - 1][i] + " ");

                }

                m--;

            }

  

            // Распечатать первый столбец из оставшихся столбцов * /

            if (l < n) {

                for (i = m - 1; i >= k; --i) {

                    System.out.print(a[i][l] + " ");

                }

                l++;

            }

        }

    }

  

    // драйверная программа

    public static void main(String[] args)

    {

        int R = 3;

        int C = 6;

        int a[][] = { { 1, 2, 3, 4, 5, 6 },

                      { 7, 8, 9, 10, 11, 12 },

                      { 13, 14, 15, 16, 17, 18 } };

        spiralPrint(R, C, a);

    }

}

  
// Предоставлено Прамод Кумар

python3

# Python3 программа для печати
# заданная матрица в виде спирали

def spiralPrint(m, n, a) :

    k = 0; l = 0

  

    '' 'k - начальный индекс строки

        m - индекс конца строки

        l - начальный индекс столбца

        n - индекс конечного столбца

        я - итератор '' '

      

  

    while (k < m and l < n) :

          

        # Распечатать первый ряд из

        # оставшиеся строки

        for i in range(l, n) :

            print(a[k][i], end = " ")

              

        k += 1

  

        # Распечатать последний столбец из

        # оставшиеся столбцы

        for i in range(k, m) :

            print(a[i][n - 1], end = " ")

              

        n -= 1

  

        # Распечатать последнюю строку из

        # оставшиеся строки

        if ( k < m) :

              

            for i in range(n - 1, (l - 1), -1) :

                print(a[m - 1][i], end = " ")

              

            m -= 1

          

        # Распечатать первый столбец из

        # оставшиеся столбцы

        if (l < n) :

            for i in range(m - 1, k - 1, -1) :

                print(a[i][l], end = " ")

              

            l += 1

  
Код водителя

a = [ [1, 2, 3, 4, 5, 6],

      [7, 8, 9, 10, 11, 12],

      [13, 14, 15, 16, 17, 18] ]

        

R = 3; C = 6

spiralPrint(R, C, a)

  
# Этот код предоставлен Никитой Тивари.

C #

// C # программа для печати заданного
// матрица в спиральной форме

using System;

  

class GFG {

    // Функция печати матрицы в виде спирали

    static void spiralPrint(int m, int n, int[, ] a)

    {

        int i, k = 0, l = 0;

        / * k - начальный индекс строки

        m - индекс конца строки

        l - начальный индекс столбца

        n - индекс конечного столбца

        я - итератор

        * /

  

        while (k < m && l < n) {

            // Распечатать первую строку

            // из оставшихся строк

            for (i = l; i < n; ++i) {

                Console.Write(a[k, i] + " ");

            }

            k++;

  

            // Распечатать последний столбец из

            // оставшиеся столбцы

            for (i = k; i < m; ++i) {

                Console.Write(a[i, n - 1] + " ");

            }

            n--;

  

            // Вывести последнюю строку из

            // остальные строки

            if (k < m) {

                for (i = n - 1; i >= l; --i) {

                    Console.Write(a[m - 1, i] + " ");

                }

                m--;

            }

  

            // Распечатать первый столбец из

            // оставшиеся столбцы

            if (l < n) {

                for (i = m - 1; i >= k; --i) {

                    Console.Write(a[i, l] + " ");

                }

                l++;

            }

        }

    }

  

    // Драйвер программы

    public static void Main()

    {

        int R = 3;

        int C = 6;

        int[, ] a = { { 1, 2, 3, 4, 5, 6 },

                      { 7, 8, 9, 10, 11, 12 },

                      { 13, 14, 15, 16, 17, 18 } };

        spiralPrint(R, C, a);

    }

}

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

PHP

<?php 
// PHP программа для печати заданного
// матрица в спиральной форме

$R = 3;

$C = 6;

  

function spiralPrint($m, $n, &$a)

{

    $k = 0;

    $l = 0;

  

    / * $ k - начальный индекс строки

        $ m - индекс конца строки

        $ l - индекс начального столбца

        $ n - индекс конечного столбца

        $ i - итератор

    * /

  

    while ($k < $m && $l < $n)

    {

        / * Вывести первый ряд из

           остальные строки * /

        for ($i = $l; $i < $n; ++$i)

        {

            echo $a[$k][$i] . " ";

        }

        $k++;

  

        / * Распечатать последний столбец

        из оставшихся столбцов * /

        for ($i = $k; $i < $m; ++$i)

        {

            echo $a[$i][$n - 1] . " ";

        }

        $n--;

  

        / * Вывести последний ряд из

           остальные строки * /

        if ($k < $m)

        {

            for ($i = $n - 1; $i >= $l; --$i)

            {

                echo $a[$m - 1][$i] . " ";

            }

            $m--;

        }

  

        / * Вывести первый столбец из

           остальные столбцы * /

        if ($l < $n)

        {

            for ($i = $m - 1; $i >= $k; --$i)

            {

                echo $a[$i][$l] . " ";

            }

            $l++; 

        }     

    }

}

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

$a = array(array(1, 2, 3, 4, 5, 6),

           array(7, 8, 9, 10, 11, 12),

           array(13, 14, 15, 16, 17, 18));

  

spiralPrint($R, $C, $a);

  
// Этот код добавлен
// ChitraNayal
?>

Выход:

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

Сложность времени: временная сложность вышеупомянутого решения O (mn).

Рекурсивный подход:

Вышеуказанная проблема может быть решена путем рекурсивной печати границы матрицы. В каждом рекурсивном вызове мы уменьшаем размеры матрицы.

Ниже приведена рекурсивная реализация для того же:

C ++

#include <iostream>

using namespace std;

  
#define R 4
#define C 4

  
// Функция для печати матрицы по спирали
// form i, j: начальный индекс матрицы, строки
// и столбец соответственно m, n: конечный индекс
// строки матрицы и столбца соответственно

void print(int arr[R][C], int i, 

                     int j, int m, int n)

{

    // Если i или j лежит вне матрицы

    if (i >= m or j >= n)

        return;

  

    // Печать первой строки

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

        cout << arr[i][p] << " ";

  

    // Печать последнего столбца

    for (int p = i + 1; p < m; p++)

        cout << arr[p][n - 1] << " ";

  

    // Печать последней строки, если последняя и

    // Первая строка не одинакова

    if ((m - 1) != i)

        for (int p = n - 2; p >= j; p--)

            cout << arr[m - 1][p] << " ";

  

    // Печать первого столбца, если последний и

    // Первый столбец не совпадает

    if ((n - 1) != j)

        for (int p = m - 2; p > i; p--)

            cout << arr[p][j] << " ";

  

    print(arr, i + 1, j + 1, m - 1, n - 1);

}

  
// Программа для водителя

int main()

{

  

    int a[R][C] = { { 1, 2, 3, 4 },

                    { 5, 6, 7, 8 },

                    { 9, 10, 11, 12 },

                    { 13, 14, 15, 16 } };

  

    print(a, 0, 0, R, C);

    return 0;

}
// Этот код предоставлен Анкуром Гоелем

Джава

// Java-программа для тестирования 1 / е закона
// для секретаря Задача:

import java.util.*;

  

class GFG

{

    static int R = 4;

    static int C = 4;

  

    // Функция для печати матрицы по спирали

    // form i, j: начальный индекс матрицы, строки

    // и столбец соответственно m, n: конечный индекс

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

    static void print(int arr[][], int i,

                      int j, int m, int n)

    {

        // Если i или j лежит вне матрицы

        if (i >= m || j >= n)

        {

            return;

        }

  

        // Печать первой строки

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

        {

            System.out.print(arr[i][p] + " ");

        }

  

        // Печать последнего столбца

        for (int p = i + 1; p < m; p++) 

        {

            System.out.print(arr[p][n - 1] + " ");

        }

  

        // Печать последней строки, если последняя и

        // Первая строка не одинакова

        if ((m - 1) != i) 

        {

            for (int p = n - 2; p >= j; p--) 

            {

                System.out.print(arr[m - 1][p] + " ");

            }

        }

  

        // Печать первого столбца, если последний и

        // Первый столбец не совпадает

        if ((n - 1) != j) 

        {

            for (int p = m - 2; p > i; p--) 

            {

                System.out.print(arr[p][j] + " ");

            }

        }

        print(arr, i + 1, j + 1, m - 1, n - 1);

    }

  

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

    public static void main(String[] args) 

    {

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

                     {5, 6, 7, 8},

                     {9, 10, 11, 12},

                     {13, 14, 15, 16}};

  

        print(a, 0, 0, R, C);

    }

}

  
// Этот код предоставлен 29AjayKumar

C #

// C # Программа для проверки 1 / е закона
// для секретаря Задача:

using System;

      

class GFG

{

    static int R = 4;

    static int C = 4;

  

    // Функция для печати матрицы по спирали

    // form i, j: начальный индекс матрицы, строки

    // и столбец соответственно m, n: конечный индекс

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

    static void print(int [,]arr, int i,

                      int j, int m, int n)

    {

        // Если i или j лежит вне матрицы

        if (i >= m || j >= n)

        {

            return;

        }

  

        // Печать первой строки

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

        {

            Console.Write(arr[i, p] + " ");

        }

  

        // Печать последнего столбца

        for (int p = i + 1; p < m; p++) 

        {

            Console.Write(arr[p, n - 1] + " ");

        }

  

        // Печать последней строки, если последняя и

        // Первая строка не одинакова

        if ((m - 1) != i) 

        {

            for (int p = n - 2; p >= j; p--) 

            {

                Console.Write(arr[m - 1, p] + " ");

            }

        }

  

        // Печать первого столбца, если последний и

        // Первый столбец не совпадает

        if ((n - 1) != j) 

        {

            for (int p = m - 2; p > i; p--) 

            {

                Console.Write(arr[p, j] + " ");

            }

        }

        print(arr, i + 1, j + 1, m - 1, n - 1);

    }

  

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

    public static void Main(String[] args) 

    {

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

                    {5, 6, 7, 8},

                    {9, 10, 11, 12},

                    {13, 14, 15, 16}};

  

        print(a, 0, 0, R, C);

    }

  
// Этот код предоставлен Принчи Сингхом

Выход:

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

Пожалуйста, напишите комментарии, если вы обнаружите, что приведенный выше код неверен, или найдите другие способы решения той же проблемы.

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

Распечатать данную матрицу в виде спирали

0.00 (0%) 0 votes