在C ++中以反螺旋形式打印给定的矩阵

在这个问题上,我们得到一个二维矩阵。我们的任务是以逆螺旋形式打印矩阵的所有元素。

让我们以一个例子来了解问题

Input:
   12 23 54 67
   76 90 01 51
   43 18 49 5
   31 91 75 9
Output: 18 49 1 90 76 43 31 91 75 9 5 51 67 54 23 12

我们将从矩阵的中心开始,以反向螺旋方向打印元素,并为反向打印元素获取四个循环。

示例

显示我们解决方案实施情况的程序

#include <iostream>
#define R 3
#define C 6
using namespace std;
void printReverseSpiral(int m, int n, int a[R][C]) {
   long int b[100];
   int i, k = 0, l = 0;
   int z = 0;
   int size = m*n;
   while (k < m && l < n) {
      int val;
      for (i = l; i < n; ++i){
         val = a[k][i];
         b[z] = val;
         ++z;
      }
      k++;
      for (i = k; i < m; ++i){
         val = a[i][n-1];
         b[z] = val;
         ++z;
      }
      n--;
      if ( k < m){
         for (i = n-1; i >= l; --i){
            val = a[m-1][i];
            b[z] = val;
            ++z;
         }
         m--;
      }
      if (l < n){
         for (i = m-1; i >= k; --i){
            val = a[i][l];
            b[z] = val;
            ++z;
         }
         l++;
      }
   }
   for (int i=size-1 ; i>=0 ; --i){
      cout<<b[i]<<" ";
   }
}
int main() {
   int mat[R][C] = {
      {34, 5, 6, 98, 12, 23},
      {9, 12, 56, 87, 99, 1},
      {13, 91, 50, 8, 21, 2}
   };
   cout<<"Printing reverse Spiral of the matrix :\n";
   printReverseSpiral(R, C, mat);
   return 0;
}

输出结果

打印矩阵的反向螺旋-

99 87 56 12 9 13 91 50 8 21 2 1 23 12 98 6 5 34