Рубрики

Круговая матрица (Построить матрицу с номерами от 1 до m * n по спирали)

Учитывая два значения m и n, заполните матрицу размера 'm * n' по спирали (или по кругу) (по часовой стрелке) натуральными числами от 1 до m * n.

Примеры:

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

Input : m = 3, n = 4
Output :  1  2  3  4
          10 11 12 5
          9  8  7  6     

Идея основана на печати заданной матрицы в виде спирали . Мы создаем матрицу размером m * n и пересекаем ее по спирали. При обходе мы отслеживаем переменную «val» для заполнения следующего значения, увеличиваем «val» по одному и помещаем ее значения в матрицу.

C ++

// C ++ программа для заполнения матрицы значениями из
// 1 к n * n по спирали.
#include <bits/stdc++.h>

using namespace std;

  

const int MAX = 100;

  
// Заполняет [m] [n] значениями от 1 до m * n в
// спиральная мода.

void spiralFill(int m, int n, int a[][MAX])

{

    // Инициализировать значение для заполнения в матрице

    int val = 1;

  

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

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

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

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

    int k = 0, l = 0;

    while (k < m && l < n)

    {

        / * Вывести первый ряд из оставшихся

          строки * /

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

            a[k][i] = val++;

  

        k++;

  

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

          столбцы * /

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

            a[i][n-1] = val++;

        n--;

  

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

           строки * /

        if (k < m)

        {

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

                a[m-1][i] = val++;

            m--;

        }

  

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

           столбцы * /

        if (l < n)

        {

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

                 a[i][l] = val++;

            l++;

        }

    }

}

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

int main()

{

    int m = 4, n = 4;

    int a[MAX][MAX];

    spiralFill(m, n, a);

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

    {

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

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

       cout << endl;

    }

    return 0;

}

Джава

// Java-программа для заполнения матрицы значениями из
// 1 к n * n по спирали.

class GFG {

  

    static int MAX = 100;

  
// Заполняет [m] [n] значениями от 1 до m * n в
// спиральная мода.

    static void spiralFill(int m, int n, int a[][]) {

        // Инициализировать значение для заполнения в матрице

        int val = 1;

  

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

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

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

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

        int k = 0, l = 0;

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

            / * Вывести первый ряд из оставшихся

          строки * /

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

                a[k][i] = val++;

            }

  

            k++;

  

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

          столбцы * /

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

                a[i][n - 1] = val++;

            }

            n--;

  

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

           строки * /

            if (k < m) {

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

                    a[m - 1][i] = val++;

                }

                m--;

            }

  

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

           столбцы * /

            if (l < n) {

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

                    a[i][l] = val++;

                }

                l++;

            }

        }

    }

  

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

    public static void main(String[] args) {

        int m = 4, n = 4;

        int a[][] = new int[MAX][MAX];

        spiralFill(m, n, a);

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

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

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

            }

            System.out.println("");

        }

    }

}

  
/ * Этот код Java предоставлен PrinciRaj1992 * /

C #

// C # программа для заполнения матрицы значениями из
// 1 к n * n по спирали.

  

using System;

class GFG {

   

    static int MAX = 100;

   
// Заполняет [m, n] значениями от 1 до m * n в
// спиральная мода.

    static void spiralFill(int m, int n, int[,] a) {

        // Инициализировать значение для заполнения в матрице

        int val = 1;

   

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

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

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

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

        int k = 0, l = 0;

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

            / * Вывести первый ряд из оставшихся

          строки * /

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

                a[k,i] = val++;

            }

   

            k++;

   

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

          столбцы * /

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

                a[i,n - 1] = val++;

            }

            n--;

   

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

           строки * /

            if (k < m) {

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

                    a[m - 1,i] = val++;

                }

                m--;

            }

   

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

           столбцы * /

            if (l < n) {

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

                    a[i,l] = val++;

                }

                l++;

            }

        }

    }

   

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

    public static void Main() {

        int m = 4, n = 4;

        int[,] a = new int[MAX,MAX];

        spiralFill(m, n, a);

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

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

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

            }

            Console.Write("\n");

        }

    }

}

PHP

<?php
// PHP-программа для заполнения матрицы значениями
// от 1 до n * n по спирали.

  
// Заполняет [m] [n] значениями от 1 до
// m * n по спирали.

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

{

    // Инициализировать значение для заполнения

    // в матрице

    $val = 1;

  

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

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

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

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

    $k = 0;

    $l = 0;

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

    {

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

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

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

            $a[$k][$i] = $val++;

  

        $k++;

  

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

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

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

            $a[$i][$n - 1] = $val++;

        $n--;

  

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

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

        if ($k < $m)

        {

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

                $a[$m - 1][$i] = $val++;

            $m--;

        }

  

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

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

        if ($l < $n)

        {

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

                $a[$i][$l] = $val++;

            $l++;

        }

    }

}

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

$m = 4;

$n = 4;

spiralFill($m, $n, $a);

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

{

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

    {

        echo ($a[$i][$j]);

        echo (" ");

    }

    echo ("\n");

}

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


Выход:

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

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

Эта статья предоставлена Аюшем Джаухари . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

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

Круговая матрица (Построить матрицу с номерами от 1 до m * n по спирали)

0.00 (0%) 0 votes