C++实现双螺旋矩阵:从代码到逻辑全解析
双螺旋矩阵是一种特殊的矩阵排列方式,其中数字以螺旋状从外向内填充。以下是一个用C++编写的程序,它生成并打印一个n x n的双螺旋矩阵。 ```cpp #include <iostream> #include <vector> using namespace std; void generateSpiralMatrix(int n, vector<vector<int>>& matrix) { int num = 1; int top = 0, bottom = n - 1; int left = 0, right = n - 1; while (top <= bottom && left <= right) { // Traverse from left to right for (int i = left; i <= right; ++i) { matrix[top][i] = num++; } top++; // Traverse from top to bottom for (int i = top; i <= bottom; ++i) { matrix[i][right] = num++; } right--; // Traverse from right to left (if there are still rows to traverse) if (top <= bottom) { for (int i = right; i >= left; --i) { matrix[bottom][i] = num++; } bottom--; } // Traverse from bottom to top (if there are still columns to traverse) if (left <= right) { for (int i = bottom; i >= top; --i) { matrix[i][left] = num++; } left++; } } } void printMatrix(const vector<vector<int>>& matrix) { for (const auto& row : matrix) { for (int val : row) { cout << val << "\t"; } cout << endl; } } int main() { int n; cout << "Enter the size of the matrix (n x n): "; cin >> n; vector<vector<int>> matrix(n, vector<int>(n, 0)); generateSpiralMatrix(n, matrix); printMatrix(matrix); return 0; } ``` 代码解释: 1. 函数`generateSpiralMatrix`:这个函数负责生成螺旋矩阵。它使用四个变量`top`, `bottom`, `left`, `right`来跟踪当前填充的边界。通过这四个边界,我们可以控制填充的方向。 2. 填充逻辑: - 从左到右填充顶部边界。 - 从上到下填充右侧边界。 - 如果还有行需要填充,则从右到左填充底部边界。 - 如果还有列需要填充,则从下到上填充左侧边界。 3. 函数`printMatrix`:这个函数负责打印生成的矩阵。 4. 主函数`main`:读取用户输入的矩阵大小,初始化矩阵,调用生成函数并打印结果。 额外需要注意的逻辑点: 1. 边界条件:在处理边界时,需要确保不会越界访问。 2. 方向切换:在填充过程中,适时切换填充方向。 3. 输入验证:可以添加对用户输入的验证,确保输入的n是一个正整数。 ######[AI写代码神器 | 731点数解答 | 2025-03-13 21:00:16]
- C++ 实现:轻松计算两个矩阵的乘法并输出结果(字节豆包 | 381点数解答 | 2025-12-03 19:20:23)136
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)371
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)302
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)323
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)342
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)493
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)378
- Python 实现:根据规则判定 2^n×2^n 方阵中作弊者的赦免命运(字节豆包 | 247点数解答 | 2024-11-03 10:30:46)208
- C语言实现:解决2ⁿ×2ⁿ方阵作弊者赦免问题(字节豆包 | 370点数解答 | 2024-11-03 10:31:31)225
- C语言递归破解2ⁿ×2ⁿ作弊者赦免难题,输出01命运矩阵!(百度文心 | 792点数解答 | 2024-11-03 10:36:04)294
- Python 实现:计算用户输入 n x n 矩阵边界元素之和(GPT | 319点数解答 | 2024-11-21 00:16:05)148
- DevC++ 实现:计算并输出 n×n 矩阵边界元素之和(GPT | 410点数解答 | 2024-11-21 00:19:17)144