📜  在矩阵中形成线圈的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:23:35.618000             🧑  作者: Mango

在矩阵中形成线圈的 C++ 程序

本篇文章介绍的是一个 C++ 程序,目的是在一个 $n\times m$ 的矩阵中形成一条线圈。以下是该程序的代码片段:

#include <iostream>
using namespace std;

void printCircle(int arr[][maxN], int n, int m, int i, int j) {
    if (i >= n || j >= m || arr[i][j] == -1) return;
    cout << arr[i][j] << " ";
    arr[i][j] = -1;
    if (i == 0) {
        if (j == m - 1) printCircle(arr, n, m, i + 1, j);
        else printCircle(arr, n, m, i, j + 1);
    } else if (j == m - 1) {
        if (i == n - 1) printCircle(arr, n, m, i, j - 1);
        else printCircle(arr, n, m, i + 1, j);
    } else if (i == n - 1) {
        if (j == 0) printCircle(arr, n, m, i - 1, j);
        else printCircle(arr, n, m, i, j - 1);
    } else if (j == 0) {
        if (i == 1) printCircle(arr, n, m, i - 1, j + 1);
        else printCircle(arr, n, m, i - 1, j);
    } else printCircle(arr, n, m, i - 1, j);
}

void printSpiral(int arr[][maxN], int n, int m) {
    if (n <= 0 || m <= 0) return;
    printCircle(arr, n, m, 0, 0);
    printSpiral(arr, n - 2, m - 2);
}

int main() {
    int arr[maxN][maxN], n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            cin >> arr[i][j];
    printSpiral(arr, n, m);
    return 0;
}

该程序实现了一个 printSpiral 函数,用于在矩阵中形成一条线圈,其过程是先打印矩阵的第一行,再从右上方开始逆时针打印其它的元素,直到回到第一行。然后将矩阵缩小,重复以上过程,直到矩阵为空。

该程序的算法和实现并不复杂,主要考验的是对递归和边界条件的理解。在 printCircle 函数中,需要先判断当前位置是否越界或已经访问过,若满足这些条件,则返回。然后打印当前位置的元素,并将其标记为已访问。接下来,根据当前位置所处的边界,确定下一个要访问的位置,并递归调用 printCircle

以上是本文对一个在矩阵中形成线圈的 C++ 程序的介绍,希望能对读者有所帮助。