C++ 程序 以逆螺旋形式打印给定矩阵
本篇文章将介绍如何使用 C++ 程序以逆螺旋形式打印给定矩阵,希望能够对你有所帮助。
什么是逆螺旋形式?
逆螺旋形式是指按照从外侧向内部卷曲的顺序访问矩阵元素,如下图所示:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
逆螺旋形式输出为:1 5 9 13 14 15 16 12 8 4 3 2 6 7 11 10
。
程序实现
下面是使用 C++ 实现逆螺旋输出的程序代码:
#include <iostream>
using namespace std;
const int MAXN = 1005;
int matrix[MAXN][MAXN];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> matrix[i][j];
int cnt = 0, total = n * m; // cnt 表示已经输出的元素个数,total 表示矩阵总共的元素个数
int left = 0, right = m - 1; // 左右边界
int top = 0, bottom = n - 1; // 上下边界
while (cnt < total)
{
// 从左到右
for (int j = left; j <= right && cnt < total; j++)
cout << matrix[top][j] << " ", cnt++;
// 从上到下
for (int i = top + 1; i <= bottom && cnt < total; i++)
cout << matrix[i][right] << " ", cnt++;
// 从右到左
for (int j = right - 1; j >= left && cnt < total; j--)
cout << matrix[bottom][j] << " ", cnt++;
// 从下到上
for (int i = bottom - 1; i > top && cnt < total; i--)
cout << matrix[i][left] << " ", cnt++;
left++; right--; top++; bottom--; // 更新边界
}
return 0;
}
代码分析
该程序的输入包括矩阵的行数和列数,以及矩阵的具体元素。程序使用数组 matrix
存储矩阵的元素,并采用“螺旋”遍历的方式输出矩阵元素。
在程序中,我们使用变量 cnt
记录已经输出的元素个数,变量 total
记录矩阵总共的元素个数。变量 left
、right
、top
、bottom
分别表示当前可取的矩阵边界。
程序先从左到右输出一行元素,再从上到下输出一列元素,再从右到左输出一行元素,最后从下到上输出一列元素。每个边界输出完毕后,都需要被更新。
程序输出的时间复杂度为 O(nm)。
下面是一个示例输出:
输入:
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
结论
本文介绍了使用 C++ 程序以逆螺旋形式打印给定矩阵的方法。通过变量控制边界,结合循环输出每一行和每一列元素,程序可以顺利地输出矩阵元素。总的时间复杂度为 O(nm),非常高效。
希望经过本文的介绍能够让读者更好地了解逆螺旋输出矩阵的原理和实现方法,并能在实际应用中灵活掌握。