C++ 中的螺旋矩陣


假設我們有一個矩陣,我們必須以螺旋方式列印矩陣元素。首先從第一行開始,列印全部內容,然後沿著最後一列列印,最後沿著最後一行列印,諸如此類,最終以螺旋方式列印元素。如果矩陣為 -

123456
789101112
131415161718

那麼輸出將為 [1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16]

為解決這個問題,我們將執行以下步驟 -

  • currRow := 0 且 currCol := 0

  • 當 currRow 和 currCol 在矩陣範圍內時

    • 對於 i 在 currCol 和 n-1 的範圍內,

      • 顯示 mat[currRow, i]

    • 增加 currRow 1

    • 對於 i 在 currRow 和 m-1 的範圍內,

      • 顯示 mat[i, n-1]

    • 減少 n 1

    • 如果 currRow < m,那麼

      • 對於 i 從 n-1 到 currCol,

        • 顯示 mat[m-1, i]

      • 減少 m 1

      • 如果 currCol < n,那麼

        • 對於 i 從 m-1 到 currRow,

          • 顯示 mat[i, currCol]

        • 增加 currCol 1

示例 (C++)

讓我們看看以下實現,以便更好地理解 -

 即時演示

#include <iostream>
#define ROW 3
#define COL 6
using namespace std;
int array[ROW][COL] = {{1, 2, 3, 4, 5, 6},
   {7, 8, 9, 10, 11, 12},
   {13, 14, 15, 16, 17, 18}};
void dispSpiral(int m, int n){
   int i, currRow = 0, currCol = 0;
   while (currRow < ROW && currCol < COL){
      for (i = currCol; i < n; i++){ //print the first row normally
      cout << array[currRow][i]<<" ";
   }
   currRow++; //point to next row
   for (i = currRow; i < m; ++i){ //Print the last column
      cout << array[i][n-1]<<" ";
   }
   n--; //set the n-1th column is current last column
   if ( currRow < m){ //when currRow is in the range, print the last row
      for (i = n-1; i >= currCol; --i){
         cout << array[m-1][i]<<" ";
      }
      m--; //decrease the row range
   }
   if (currCol < n){ //when currCol is in the range, print the fist column
      for (i = m-1; i >= currRow; --i){
         cout << array[i][currCol]<<" ";
      }
      currCol++;
      }
   }
}
int main(){
   dispSpiral(ROW, COL);
}

輸入

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

輸出

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

更新於: 27-4-2020

4K+ 瀏覽

開啟您職業生涯

完成課程以獲得認證

進入
廣告