Computer >> Máy Tính >  >> Lập trình >> C ++

In một ma trận đã cho ở dạng xoắn ốc ngược trong C ++

Trong bài toán này, chúng ta được đưa ra một ma trận 2 chiều. Nhiệm vụ của chúng tôi là in tất cả các phần tử của ma trận ở dạng xoắn ốc ngược.

Hãy lấy một ví dụ để hiểu vấn đề

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

Chúng tôi sẽ bắt đầu từ tâm của ma trận và in các phần tử theo hướng xoắn ốc ngược lại, lấy bốn vòng để in các phần tử theo hướng ngược lại.

Ví dụ

Chương trình cho thấy việc triển khai giải pháp của chúng tôi

#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;
}

Đầu ra

In Xoắn ốc đảo ngược của ma trận -

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