给定两个值m和n,用1到m*n的自然数以螺旋(或圆形)方式(顺时针)填充大小为“m*n”的矩阵。
null
例如:
Input : m = 4, n = 4Output : 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 Input : m = 3, n = 4Output : 1 2 3 4 10 11 12 5 9 8 7 6
这个想法是基于 以螺旋形式打印给定的矩阵 .我们创建一个大小为m*n的矩阵,并以螺旋方式遍历它。在遍历时,我们跟踪变量“val”以填充下一个值,我们逐个递增“val”,并将其值放入矩阵中。
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; } |
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( "" ); } } } |
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 ( "" ); } // 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 412 13 14 511 16 15 610 9 8 7
时间复杂性: O(m*n)
空间复杂性: O(m*n)
本文由 阿尤什·焦哈里 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END