Trong bài toán này, chúng ta được cho một ma trận 2 chiều. Nhiệm vụ là in tất cả các phần tử của ma trận theo dạng xoáy ngược.
Ví dụ để hiểu vấn đề:
Đầu vào: 12 23 54 67 76 90 01 51 43 18 49 5 31 91 75 9 Đầu ra: 18 49 1 90 76 43 31 91 75 9 5 51 67 54 23 12
Ta bắt đầu từ tâm ma trận và in các phần tử theo hướng xoáy ngược, sử dụng bốn vòng lặp để in theo hướng ngược.
Ví Dụ
Chương trình minh họa giải pháp:
#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 << "In xoáy ngược của ma trận:\n";
printReverseSpiral(R, C, mat);
return 0;
}
Đầu Ra
In xoáy 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