<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 以螺旋形式打印給定的矩陣 > 原文: [https://www.geeksforgeeks.org/print-a-given-matrix-in-spiral-form/](https://www.geeksforgeeks.org/print-a-given-matrix-in-spiral-form/) 給定 2D 數組,以螺旋形式打印。 請參閱以下示例。 **示例**: ``` 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 Explanation: The output is matrix in spiral format. 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 Explanation :The output is matrix in spiral format. ``` ![](https://img.kancloud.cn/8c/0b/8c0b33fca2eec6ae74ede2fa1df7955d_778x553.png) **方法 1 **:這是解決以下問題的簡單方法。 * **方法**:可以通過將矩陣劃分為回路,正方形或邊界來解決該問題。 可以看出,首先以順時針方式打印外循環的元素,然后再打印內循環的元素。 因此,可以使用打印所有元素的四個循環來解決打印循環元素的問題。 每個“ for”循環都定義了矩陣的單個方向移動。 第一個 for 循環代表從左到右的運動,而第二個爬取代表從上到下的運動,第三個代表從右到左的運動,第四個代表從下到上的運動。 * **算法**: 1. 創建和初始化變量 k –起始行索引,m –結束行索引,l –起始列索引,n –結束列索引 2. 運行循環,直到打印出所有循環平方。 3. 在每個外循環中,以順時針方式打印正方形的元素。 4. 打印第一行,即打印第 k 行從列索引 l 到 n 的元素,并增加 k 的計數。 5. 打印右列,即從行索引 k 到 m 打印最后一列或第 n-1 列并減少 n 的計數。 6. 打印底部一行,即如果 k > m,則從列 n-1 到 l 打印第 m-1 行的元素,并減少 m 的計數 7. 打印左列,即如果 l < n,則將第 m-1 行的第 l 列的元素打印到 k,并增加 l 的計數。 * **實現**: ## 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 - starting row index? ????????m - ending row index? ????????l - starting column index? ????????n - ending column index? ????????i - iterator? ????*/ ????while (k < m && l < n) { ????????/* Print the first row from ???????????????the remaining rows */ ????????for (i = l; i < n; ++i) { ????????????cout << a[k][i] << " "; ????????} ????????k++; ????????/* Print the last column? ?????????from the remaining columns */ ????????for (i = k; i < m; ++i) { ????????????cout << a[i][n - 1] << " "; ????????} ????????n--; ????????/* Print the last row from? ????????????????the remaining rows */ ????????if (k < m) { ????????????for (i = n - 1; i >= l; --i) { ????????????????cout << a[m - 1][i] << " "; ????????????} ????????????m--; ????????} ????????/* Print the first column from ???????????????????the remaining columns */ ????????if (l < n) { ????????????for (i = m - 1; i >= k; --i) { ????????????????cout << a[i][l] << " "; ????????????} ????????????l++; ????????} ????} } /* Driver program to test above functions */ 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; } // This is code is contributed by rathbhupendra ``` ## C ``` /* This code is adopted from the solution given? ???@ 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 - starting row index ????????m - ending row index ????????l - starting column index ????????n - ending column index ????????i - iterator ????*/ ????while (k < m && l < n) { ????????/* Print the first row from the remaining rows */ ????????for (i = l; i < n; ++i) { ????????????printf("%d ", a[k][i]); ????????} ????????k++; ????????/* Print the last column from the remaining columns */ ????????for (i = k; i < m; ++i) { ????????????printf("%d ", a[i][n - 1]); ????????} ????????n--; ????????/* Print the last row from the remaining rows */ ????????if (k < m) { ????????????for (i = n - 1; i >= l; --i) { ????????????????printf("%d ", a[m - 1][i]); ????????????} ????????????m--; ????????} ????????/* Print the first column from the remaining columns */ ????????if (l < n) { ????????????for (i = m - 1; i >= k; --i) { ????????????????printf("%d ", a[i][l]); ????????????} ????????????l++; ????????} ????} } /* Driver program to test above functions */ 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 ``` // Java program to print a given matrix in spiral form import java.io.*; class GFG { ????// Function print matrix in spiral form ????static void spiralPrint(int m, int n, int a[][]) ????{ ????????int i, k = 0, l = 0; ????????/*? k - starting row index ????????m - ending row index ????????l - starting column index ????????n - ending column index ????????i - iterator ????????*/ ????????while (k < m && l < n) { ????????????// Print the first row from the remaining rows ????????????for (i = l; i < n; ++i) { ????????????????System.out.print(a[k][i] + " "); ????????????} ????????????k++; ????????????// Print the last column from the remaining columns ????????????for (i = k; i < m; ++i) { ????????????????System.out.print(a[i][n - 1] + " "); ????????????} ????????????n--; ????????????// Print the last row from the remaining rows */ ????????????if (k < m) { ????????????????for (i = n - 1; i >= l; --i) { ????????????????????System.out.print(a[m - 1][i] + " "); ????????????????} ????????????????m--; ????????????} ????????????// Print the first column from the remaining columns */ ????????????if (l < n) { ????????????????for (i = m - 1; i >= k; --i) { ????????????????????System.out.print(a[i][l] + " "); ????????????????} ????????????????l++; ????????????} ????????} ????} ????// driver program ????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); ????} } // Contributed by Pramod Kumar ``` ## Python3 ``` # Python3 program to print? # given matrix in spiral form def spiralPrint(m, n, a) : ????k = 0; l = 0 ????''' k - starting row index ????????m - ending row index ????????l - starting column index ????????n - ending column index ????????i - iterator ''' ????while (k < m and l < n) : ????????# Print the first row from ????????# the remaining rows? ????????for i in range(l, n) : ????????????print(a[k][i], end = " ") ????????k += 1 ????????# Print the last column from ????????# the remaining columns? ????????for i in range(k, m) : ????????????print(a[i][n - 1], end = " ") ????????n -= 1 ????????# Print the last row from ????????# the remaining rows? ????????if ( k < m) : ????????????for i in range(n - 1, (l - 1), -1) : ????????????????print(a[m - 1][i], end = " ") ????????????m -= 1 ????????# Print the first column from ????????# the remaining columns? ????????if (l < n) : ????????????for i in range(m - 1, k - 1, -1) : ????????????????print(a[i][l], end = " ") ????????????l += 1 # Driver Code 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) # This code is contributed by Nikita Tiwari. ``` ## C# ``` // C# program to print a given // matrix in spiral form using System; class GFG { ????// Function print matrix in spiral form ????static void spiralPrint(int m, int n, int[, ] a) ????{ ????????int i, k = 0, l = 0; ????????/* k - starting row index ????????m - ending row index ????????l - starting column index ????????n - ending column index ????????i - iterator ????????*/ ????????while (k < m && l < n) { ????????????// Print the first row? ????????????// from the remaining rows ????????????for (i = l; i < n; ++i) { ????????????????Console.Write(a[k, i] + " "); ????????????} ????????????k++; ????????????// Print the last column from the ????????????// remaining columns ????????????for (i = k; i < m; ++i) { ????????????????Console.Write(a[i, n - 1] + " "); ????????????} ????????????n--; ????????????// Print the last row from? ????????????// the remaining rows? ????????????if (k < m) { ????????????????for (i = n - 1; i >= l; --i) { ????????????????????Console.Write(a[m - 1, i] + " "); ????????????????} ????????????????m--; ????????????} ????????????// Print the first column from? ????????????// the remaining columns ????????????if (l < n) { ????????????????for (i = m - 1; i >= k; --i) { ????????????????????Console.Write(a[i, l] + " "); ????????????????} ????????????????l++; ????????????} ????????} ????} ????// Driver program ????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); ????} } // This code is contributed by Sam007 ``` ## PHP ``` <?php? // PHP program to print a given // matrix in spiral form $R = 3; $C = 6; function spiralPrint($m, $n, &$a) { ????$k = 0; ????$l = 0; ????/* $k - starting row index ????????$m - ending row index ????????$l - starting column index ????????$n - ending column index ????????$i - iterator ????*/ ????while ($k < $m && $l < $n) ????{ ????????/* Print the first row from ???????????the remaining rows */ ????????for ($i = $l; $i < $n; ++$i) ????????{ ????????????echo $a[$k][$i] . " "; ????????} ????????$k++; ????????/* Print the last column? ????????from the remaining columns */ ????????for ($i = $k; $i < $m; ++$i) ????????{ ????????????echo $a[$i][$n - 1] . " "; ????????} ????????$n--; ????????/* Print the last row from ???????????the remaining rows */ ????????if ($k < $m) ????????{ ????????????for ($i = $n - 1; $i >= $l; --$i) ????????????{ ????????????????echo $a[$m - 1][$i] . " "; ????????????} ????????????$m--; ????????} ????????/* Print the first column from ???????????the remaining columns */ ????????if ($l < $n) ????????{ ????????????for ($i = $m - 1; $i >= $k; --$i) ????????????{ ????????????????echo $a[$i][$l] . " "; ????????????} ????????????$l++;? ????????}????? ????} } // Driver code $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); // This code is contributed // by ChitraNayal ?> ``` **輸出**: ``` 1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 ``` * **復雜度分析**: * **時間復雜度**: O(m * n)。 要遍歷矩陣 O(m * n),需要時間。 * **空間可喜度**:`O(1)`。 不需要多余的空間。 **方法 2** :這是一種遞歸方法。 * **方法**:上述問題可以通過遞歸打印矩陣的邊界來解決。 在每個遞歸調用中,我們減小矩陣的維數。 打印邊界或循環的想法是相同的。 * **算法**: 1. 創建一個使用矩陣和一些變量*(k –起始行索引,m –結束行索引,l –起始列索引,n –結束列索引)*作為參數的遞歸函數 2. 檢查基本情況(狀態索引小于或等于結束索引)并按順時針方向打印邊界元素 3. 打印第一行,即打印第 k 行從列索引 l 到 n 的元素,并增加 k 的計數。 4. 打印右列,即從行索引 k 到 m 打印最后一列或第 n-1 列并減少 n 的計數。 5. 打印底部一行,即如果 k > m,則從列 n-1 到 l 打印第 m-1 行的元素,并減少 m 的計數 6. 打印左列,即如果 l < n,則將第 m-1 行的第 l 列的元素打印到 k,并增加 l 的計數。 7. 用行和列的開始和結束索引的值遞歸調用函數。 * **實現**: ## C++ ``` #include <iostream> using namespace std; #define R 4 #define C 4 // Function for printing matrix in spiral // form i, j: Start index of matrix, row? // and column respectively m, n: End index // of matrix row and column respectively void print(int arr[R][C], int i,? ?????????????????????int j, int m, int n) { ????// If i or j lies outside the matrix ????if (i >= m or j >= n) ????????return; ????// Print First Row ????for (int p = i; p < n; p++) ????????cout << arr[i][p] << " "; ????// Print Last Column ????for (int p = i + 1; p < m; p++) ????????cout << arr[p][n - 1] << " "; ????// Print Last Row, if Last and ????// First Row are not same ????if ((m - 1) != i) ????????for (int p = n - 2; p >= j; p--) ????????????cout << arr[m - 1][p] << " "; ????// Print First Column,? if Last and ????// First Column are not same ????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); } // Driver Program 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; } // This Code is contributed by Ankur Goel ``` ## Java ``` // Java Program to test 1/e law? // for Secretary Problem : import java.util.*; class GFG { ????static int R = 4; ????static int C = 4; ????// Function for printing matrix in spiral ????// form i, j: Start index of matrix, row? ????// and column respectively m, n: End index ????// of matrix row and column respectively ????static void print(int arr[][], int i, ??????????????????????int j, int m, int n) ????{ ????????// If i or j lies outside the matrix ????????if (i >= m || j >= n) ????????{ ????????????return; ????????} ????????// Print First Row ????????for (int p = i; p < n; p++) ????????{ ????????????System.out.print(arr[i][p] + " "); ????????} ????????// Print Last Column ????????for (int p = i + 1; p < m; p++)? ????????{ ????????????System.out.print(arr[p][n - 1] + " "); ????????} ????????// Print Last Row, if Last and ????????// First Row are not same ????????if ((m - 1) != i)? ????????{ ????????????for (int p = n - 2; p >= j; p--)? ????????????{ ????????????????System.out.print(arr[m - 1][p] + " "); ????????????} ????????} ????????// Print First Column, if Last and ????????// First Column are not same ????????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); ????} ????// Driver Code ????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); ????} } // This code is contributed by 29AjayKumar ``` ## C# ``` // C# Program to test 1/e law? // for Secretary Problem : using System; class GFG { ????static int R = 4; ????static int C = 4; ????// Function for printing matrix in spiral ????// form i, j: Start index of matrix, row? ????// and column respectively m, n: End index ????// of matrix row and column respectively ????static void print(int [,]arr, int i, ??????????????????????int j, int m, int n) ????{ ????????// If i or j lies outside the matrix ????????if (i >= m || j >= n) ????????{ ????????????return; ????????} ????????// Print First Row ????????for (int p = i; p < n; p++) ????????{ ????????????Console.Write(arr[i, p] + " "); ????????} ????????// Print Last Column ????????for (int p = i + 1; p < m; p++)? ????????{ ????????????Console.Write(arr[p, n - 1] + " "); ????????} ????????// Print Last Row, if Last and ????????// First Row are not same ????????if ((m - 1) != i)? ????????{ ????????????for (int p = n - 2; p >= j; p--)? ????????????{ ????????????????Console.Write(arr[m - 1, p] + " "); ????????????} ????????} ????????// Print First Column, if Last and ????????// First Column are not same ????????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); ????} ????// Driver Code ????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); ????} }? // This code is contributed by Princi Singh ``` **輸出**: ``` 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 ``` * **復雜度分析**: * **時間復雜度**: O(m * n)。 要遍歷矩陣 O(m * n),需要時間。 * **空間可喜度**:`O(1)`。 不需要多余的空間。 * [矩陣](https://www.geeksforgeeks.org/zigzag-or-diagonal-traversal-of-matrix/)的對角遍歷 * [抗螺旋形式的打印矩陣](https://www.geeksforgeeks.org/print-matrix-antispiral-form/) * [以 Z 字形打印給定矩陣](https://www.geeksforgeeks.org/print-given-matrix-zigzag-form/) 如果您發現上述代碼不正確,或者找到其他解決相同問題的方法,請寫評論。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看