Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

In Ma Trận Dạng Xoáy Bắt Đầu Từ Một Điểm Trong C++


Trong bài toán này, chúng ta được cho một ma trận 2D và một điểm P(c,r). 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 kim đồng hồ) bắt đầu từ điểm P cho trước.

Ví dụ để hiểu vấn đề:

Đầu vào: matrix[][] = {{3, 5, 7}} Đầu ra:

Để giải quyết, ta sử dụng 4 vòng lặp để in các phần tử. Mỗi vòng in các phần tử theo hướng của nó. Ta bắt đầu in từ điểm P và tiếp tục in theo dạng xoáy.

Ví Dụ

Chương trình minh họa giải pháp:

#include <iostream>
using namespace std;
const int MAX = 100;

void printSpiralMatrix(int mat[][MAX], int r, int c) {
    int i, a = 0, b = 2;
    int low_row = (0 > a) ? 0 : a;
    int low_column = (0 > b) ? 0 : b - 1;
    int high_row = ((a + 1) >= r) ? r - 1 : a + 1;
    int high_column = ((b + 1) >= c) ? c - 1 : b + 1;
    while ((low_row > 0 - r && low_column > 0 - c)) {
        for (i = low_column + 1; i <= high_column && i < c && low_row >= 0; ++i)
            cout << mat[low_row][i] << " ";
        low_row -= 1;
        for (i = low_row + 2; i <= high_row && i < r && high_column < c; ++i)
            cout << mat[i][high_column] << " ";
        high_column += 1;
        for (i = high_column - 2; i >= low_column && i >= 0 && high_row < r; --i)
            cout << mat[high_row][i] << " ";
        high_row += 1;
        for (i = high_row - 2; i > low_row && i >= 0 && low_column >= 0; --i)
            cout << mat[i][low_column] << " ";
        low_column -= 1;
    }
    cout << endl;
}

int main() {
    int mat[][MAX] = {
        { 1, 4, 7 },
        { 2, 5, 8 },
        { 3, 6, 9 }
    };
    int r = 3, c = 3;
    cout << "Duyệt xoáy của ma trận bắt đầu từ điểm " << r << ", " << c << " là:\n";
    printSpiralMatrix(mat, r, c);
    return 0;
}

Đầu Ra

Duyệt xoáy của ma trận bắt đầu từ điểm 3, 3 là:

7 8 5 4 9 6 3 2 1