#include <iostream>
#include <iomanip>
using namespace std;
// 输出螺旋矩阵
void Matrix(int** matrix, int n)
{
//const int size = 10; // 矩阵大小
//int matrix[size][size] = {0};
int r = 0;
int c = 0;
int start = 1; // 起始值
int temp = n;//3
for (int q = 0; q < n / 2; q++) // n阶的矩阵可以画n/2个圈
{
for (; c < temp - 1; c++) // a排赋值
{
/*
if (q == 1)
{
//循环两次,覆盖第一圈最后一个数
cout<<"第二圈 c = "<<c<<endl;
}
*/
matrix[r][c] = start++;
}
//c=2
for (; r < temp - 1; r++) // b排赋值
matrix[r][c] = start++;
//r=2
for (c = temp - 1; c > q; c--) // c排赋值
matrix[r][c] = start++;
//c=0
for (r = temp - 1; r > q; r--) // d排赋值
matrix[r][c] = start++;
//r=0
// 进入下一圈
temp--;//2
r++;//r=1
start -= 1; // 这里-1是因为在换圈的时候会多加1
}
if (0 != n % 2) // 如果size为奇数则最后会有一个数遍历不到,这里补上
matrix[r][c+1] = start + 1;
// 输出数组
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
//控制输出间隔,默认右对齐
cout << setw(5) << matrix[i][j];
}
cout << endl;
}
}
int main()
{
int **data;
int n;
cin>>n;
data = new int*[n]; // 每个指针指向一个指针数组
for(int j=0; j<n; j++)
{
data[j] = new int[n]; //这个指针数组的每个指针元素又指向一个数组
}
//初始化数组元素
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
data[i][j]=0;
}
}
Matrix(data, n);
/*
//打印数组
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
cout<<data[i][j]<<endl;
}
}
*/
//释放动态内存
for (int i=0; i<n; i++)
{
delete[] data[i]; //先撤销指针元素所指向的数组
}
delete[] data;
system("pause");
return 0;
}