Dados dos valores m y n, llene una array de tamaño ‘m*n’ en forma de espiral (o circular) (en el sentido de las agujas del reloj) con números naturales del 1 al m*n.
Ejemplos:
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
La idea se basa en Imprimir una array dada en forma de espiral . Creamos una array de tamaño m * n y la recorremos en forma de espiral. Mientras recorremos, hacemos un seguimiento de una variable «val» para completar el siguiente valor, incrementamos «val» uno por uno y ponemos sus valores en la array.
Implementación:
C++
// C++ program to fill a matrix with values from // 1 to n*n in spiral fashion. #include <bits/stdc++.h> using namespace std; const int MAX = 100; // Fills a[m][n] with values from 1 to m*n in // spiral fashion. void spiralFill(int m, int n, int a[][MAX]) { // Initialize value to be filled in matrix int val = 1; /* k - starting row index m - ending row index l - starting column index n - ending column index */ int k = 0, l = 0; while (k < m && l < n) { /* Print the first row from the remaining rows */ for (int i = l; i < n; ++i) a[k][i] = val++; k++; /* Print the last column from the remaining columns */ for (int i = k; i < m; ++i) a[i][n-1] = val++; n--; /* Print the last row from the remaining rows */ if (k < m) { for (int i = n-1; i >= l; --i) a[m-1][i] = val++; m--; } /* Print the first column from the remaining columns */ if (l < n) { for (int i = m-1; i >= k; --i) a[i][l] = val++; l++; } } } /* Driver program to test above functions */ 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; }
C
// C program to fill a matrix with values from // 1 to n*n in spiral fashion. #include <stdio.h> const int MAX = 100; // Fills a[m][n] with values from 1 to m*n in // spiral fashion. void spiralFill(int m, int n, int a[][MAX]) { // Initialize value to be filled in matrix int val = 1; /* k - starting row index m - ending row index l - starting column index n - ending column index */ int k = 0, l = 0; while (k < m && l < n) { /* Print the first row from the remaining rows */ for (int i = l; i < n; ++i) a[k][i] = val++; k++; /* Print the last column from the remaining columns */ for (int i = k; i < m; ++i) a[i][n-1] = val++; n--; /* Print the last row from the remaining rows */ if (k < m) { for (int i = n-1; i >= l; --i) a[m-1][i] = val++; m--; } /* Print the first column from the remaining columns */ if (l < n) { for (int i = m-1; i >= k; --i) a[i][l] = val++; l++; } } } /* Driver program to test above functions */ 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++) printf("%d ",a[i][j]); printf("\n"); } return 0; } // This code is contributed by kothavvsaakash.
Java
// Java program to fill a matrix with values from // 1 to n*n in spiral fashion. class GFG { static int MAX = 100; // Fills a[m][n] with values from 1 to m*n in // spiral fashion. static void spiralFill(int m, int n, int a[][]) { // Initialize value to be filled in matrix int val = 1; /* k - starting row index m - ending row index l - starting column index n - ending column index */ int k = 0, l = 0; while (k < m && l < n) { /* Print the first row from the remaining rows */ for (int i = l; i < n; ++i) { a[k][i] = val++; } k++; /* Print the last column from the remaining columns */ for (int i = k; i < m; ++i) { a[i][n - 1] = val++; } n--; /* Print the last row from the remaining rows */ if (k < m) { for (int i = n - 1; i >= l; --i) { a[m - 1][i] = val++; } m--; } /* Print the first column from the remaining columns */ if (l < n) { for (int i = m - 1; i >= k; --i) { a[i][l] = val++; } l++; } } } /* Driver program to test above functions */ 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(""); } } } /* This Java code is contributed by PrinciRaj1992*/
Python3
# Python program to fill a matrix with # values from 1 to n*n in spiral fashion. # Fills a[m][n] with values # from 1 to m*n in spiral fashion. def spiralFill(m, n, a): # Initialize value to be filled in matrix. val = 1 # k - starting row index # m - ending row index # l - starting column index # n - ending column index k, l = 0, 0 while (k < m and l < n): # Print the first row from the remaining rows. for i in range(l, n): a[k][i] = val val += 1 k += 1 # Print the last column from the remaining columns. for i in range(k, m): a[i][n - 1] = val val += 1 n -= 1 # Print the last row from the remaining rows. if (k < m): for i in range(n - 1, l - 1, -1): a[m - 1][i] = val val += 1 m -= 1 # Print the first column from the remaining columns. if (l < n): for i in range(m - 1, k - 1, -1): a[i][l] = val val += 1 l += 1 # Driver program if __name__ == '__main__': m, n = 4, 4 a = [[0 for j in range(n)] for i in range(m)] spiralFill(m, n, a) for i in range(m): for j in range(n): print(a[i][j], end=' ') print('') # This code is contributed by Parin Shah
C#
// C# program to fill a matrix with values from // 1 to n*n in spiral fashion. using System; class GFG { static int MAX = 100; // Fills a[m,n] with values from 1 to m*n in // spiral fashion. static void spiralFill(int m, int n, int[,] a) { // Initialize value to be filled in matrix int val = 1; /* k - starting row index m - ending row index l - starting column index n - ending column index */ int k = 0, l = 0; while (k < m && l < n) { /* Print the first row from the remaining rows */ for (int i = l; i < n; ++i) { a[k,i] = val++; } k++; /* Print the last column from the remaining columns */ for (int i = k; i < m; ++i) { a[i,n - 1] = val++; } n--; /* Print the last row from the remaining rows */ if (k < m) { for (int i = n - 1; i >= l; --i) { a[m - 1,i] = val++; } m--; } /* Print the first column from the remaining columns */ if (l < n) { for (int i = m - 1; i >= k; --i) { a[i,l] = val++; } l++; } } } /* Driver program to test above functions */ 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 program to fill a matrix with values // from 1 to n*n in spiral fashion. // Fills a[m][n] with values from 1 to // m*n in spiral fashion. function spiralFill($m, $n, &$a) { // Initialize value to be filled // in matrix $val = 1; /* k - starting row index m - ending row index l - starting column index n - ending column index */ $k = 0; $l = 0; while ($k < $m && $l < $n) { /* Print the first row from the remaining rows */ for ($i = $l; $i < $n; ++$i) $a[$k][$i] = $val++; $k++; /* Print the last column from the remaining columns */ for ($i = $k; $i < $m; ++$i) $a[$i][$n - 1] = $val++; $n--; /* Print the last row from the remaining rows */ if ($k < $m) { for ($i = $n - 1; $i >= $l; --$i) $a[$m - 1][$i] = $val++; $m--; } /* Print the first column from the remaining columns */ if ($l < $n) { for ($i = $m - 1; $i >= $k; --$i) $a[$i][$l] = $val++; $l++; } } } // Driver Code $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"); } // This code is contributed // by Shivi_Aggarwal ?>
Javascript
<script> // Javascript program to fill a matrix with values from // 1 to n*n in spiral fashion. const MAX = 100; // Fills a[m][n] with values from 1 to m*n in // spiral fashion. function spiralFill(m, n, a) { // Initialize value to be filled in matrix let val = 1; /* k - starting row index m - ending row index l - starting column index n - ending column index */ let k = 0, l = 0; while (k < m && l < n) { /* Print the first row from the remaining rows */ for (let i = l; i < n; ++i) a[k][i] = val++; k++; /* Print the last column from the remaining columns */ for (let i = k; i < m; ++i) a[i][n-1] = val++; n--; /* Print the last row from the remaining rows */ if (k < m) { for (let i = n - 1; i >= l; --i) a[m-1][i] = val++; m--; } /* Print the first column from the remaining columns */ if (l < n) { for (let i = m - 1; i >= k; --i) a[i][l] = val++; l++; } } } /* Driver program to test above functions */ let m = 4, n = 4; let a = Array.from(Array(MAX), () => new Array(MAX)); spiralFill(m, n, a); for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) document.write(a[i][j] + " "); document.write("<br>"); } // This code is contributed by souravmahato348. </script>
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
Complejidad temporal: O(m * n)
Complejidad espacial: O(m * n)
Este artículo es una contribución de Ayush Jauhari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA