回形方阵c++递归法求解
时间: 2024-08-13 18:01:54 浏览: 98
在C++中,你可以使用递归的方式来生成或遍历回形方阵。这里是一个简单的递归函数示例,用于生成指定大小的回形方阵:
```cpp
#include <vector>
std::vector<int> spiralOrder(int n) {
std::vector<int> result;
if (n == 0) return result;
// 初始化矩阵
int matrix[n][n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
matrix[i][j] = i + n * j; // 这里可以根据需求设置初始值
// 递归函数,四个边界条件分别代表上、右、下、左四个方向的移动
helper(result, matrix, 0, 0, n - 1, n - 1); // 起始位置 (0, 0)
return result;
}
void helper(std::vector<int>& result, int matrix[n][n], int startRow, int startCol, int endRow, int endCol) {
// 添加当前行
for (int i = startCol; i <= endCol; ++i) {
result.push_back(matrix[startRow][i]);
}
startRow++;
// 添加当前列
for (int i = startRow; i <= endRow; ++i) {
result.push_back(matrix[i][endCol]);
}
endCol--;
// 如果还有剩余区域,继续递归
if (startRow < endRow) {
for (int i = endCol; i >= startCol; --i) {
result.push_back(matrix[endRow][i]);
}
endRow--;
}
if (startCol < endCol) {
for (int i = endRow; i >= startRow; --i) {
result.push_back(matrix[i][startCol]);
}
startCol++;
}
// 递归结束时,退出函数
if (startRow <= endRow && startCol <= endCol)
helper(result, matrix, startRow, startCol, endRow, endCol);
}
// 示例使用
int main() {
int n = 3;
std::vector<int> result = spiralOrder(n);
for (auto &num : result) {
std::cout << num << " ";
}
return 0;
}
```
这个程序首先初始化一个n×n的矩阵,并使用`helper`函数沿着四个边界逐步将元素添加到结果列表中。递归会在所有元素都被添加到结果后停止。
阅读全文
相关推荐


















