螺旋矩阵
对一个如下所示的矩阵
规律是从首坐标开始依次螺旋增大
很多面试题都喜欢问这样的问题,解决的方法很简单,把复杂的问题分解成简单的问题。
①把一个矩阵分层,一层一层的解决;
②再分层的基础上,再将一层分成上下左右四个部分单独解决;
只要注意一下数组的边界即可循环完成,有一点需要注意当数组的大小为奇数或是偶数时是有稍许不同的需要注意一下。
#include <iostream>
#include <iomanip>
int main()
{
using namespace std;
cout << "Enter the size of matrix: ";
int n,m=1;
cin >> n; //输入矩阵的大小
int **arr = new int*[n]; //动态分配二维矩阵
if (NULL==arr) //检测分配是否成功
{
exit(1);
}
for (int i = 0; i < n; i++)
{
arr[i] = new int[n];
if (NULL == arr[i])
{
exit(1);
}
}
for (int i = 0; i < ((n % 2 != 0) ? (n - 1) / 2:n/2); i++)//对奇偶不同的数组分别计算层数
{
for (int j = i; j < n-i-1; j++) //处理上面
{
arr[i][j] = m++;
}
for (int j = i; j <n-i-1; j++) //处理右面
{
arr[j][n - i - 1] = m++;
}
for (int j = n-i-1; j > i; j--) //处理下面
{
arr[n - i - 1][j] = m++;
}
for (int j = n-i-1; j>i; j--) //处理左面
{
arr[j][i] = m++;
}
}
if (n%2!=0) //若是奇数,补出中心点
{
arr[n / 2][n / 2] = m;
}
for (int i = 0; i < n; i++) //循环打印