以逆向螺旋形式打印一个给定的矩阵(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

更新日期:27-01-2020

371 次浏览

开启你的 职业生涯

通过完成此课程获取认证

开始学习
广告