编写一个程序,采用迭代算法和递归算法创建一个n(1n10)阶螺旋矩阵并输出,例如,n=4时的螺旋矩阵如下: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7用C++语言编写
时间: 2024-09-29 07:02:36 浏览: 41
在C++中,我们可以分别使用迭代和递归两种方法来生成一个n阶螺旋矩阵。这里给出两个示例:
**迭代法:**
```cpp
#include <iostream>
using namespace std;
void printSpiral(int m, int n, int matrix[m][n], int dx = 0, int dy = 1) {
int i = 0, j = 0;
while (i < m && j < n) {
// 打印当前行
for (int k = 0; k < n - j; ++k) {
cout << matrix[i][j + k] << " ";
}
i += dx;
// 打印下一行
if (i < m) {
for (int k = 0; k < m - i; ++k) {
cout << matrix[i + dx][j + n - k - 1] << " ";
}
j += dy;
}
// 如果还没到达右边界,打印右边列
if (j < n) {
for (int k = 0; k < j; ++k) {
cout << matrix[i + m - 1 - k][j] << " ";
}
i -= dy;
}
// 如果还没到达左边界,打印左边列
if (i > 0) {
for (int k = 0; k < i; ++k) {
cout << matrix[i][j - k - 1] << " ";
}
j -= dx;
}
}
}
// 示例函数调用
void createSpiralMatrix(int n) {
int matrix[n][n];
int num = 1;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = num++;
}
}
printSpiral(n, n, matrix);
}
int main() {
int n = 4;
createSpiralMatrix(n);
return 0;
}
```
**递归法(较复杂,不推荐用于大规模输入):**
```cpp
#include <iostream>
using namespace std;
void printSpiralRecursive(int m, int n, int matrix[m][n], int top, int right) {
if (top >= m || right >= n)
return;
// Print the first row from the remaining elements
for (int i = top; i < right; ++i)
cout << matrix[top][i] << " ";
// Print the last column from the remaining elements
printSpiralRecursive(m, n, matrix, top + 1, right);
// Print the last row from the remaining elements
if (top < right - 1)
printSpiralRecursive(m, n, matrix, top + 1, right - 1);
// Print the first column from the remaining elements
if (top < right - 1)
printSpiralRecursive(m, n, matrix, top, right - 2);
}
void createSpiralMatrixRecursive(int n) {
int matrix[n][n];
int num = 1;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = num++;
}
}
printSpiralRecursive(n, n, matrix, 0, n);
}
int main() {
int n = 4;
createSpiralMatrixRecursive(n);
return 0;
}
```
在这两个示例中,`createSpiralMatrix` 和 `createSpiralMatrixRecursive` 分别初始化了一个n阶矩阵并调用了打印函数。你可以根据需要选择适合的版本。
阅读全文