采用递归的思路求解。
递归思路:
一个螺旋矩阵,最外层大螺旋是一个大问题,里面的小螺旋就是一个小问题,从大问题到小问题,变化的是螺旋矩阵的边长和起点,边长每次减少2格,起点沿着矩阵的对角线每次跳一格(从(0,0)到(1,1)),当矩阵边长只剩下0或者1时,为终止情况,这时候就可以结束递归了。
代码如下:
#include <iostream>
using namespace std;
int num[1001][1001];
void pic(int n, int begin, int first)
{
if (n == 0) return;
if (n == 1)
{
num[begin][begin] = first;
return;
}
int i = begin;
int j = begin;
int k;
for (k = 0; k < n - 1; ++k)
{
num[i][j] = first;
j++;
first++;
}
for (k = 0; k < n - 1; ++k)
{
num[i][j] = first;
i++;
first++;
}
for (k = 0; k < n - 1; ++k)
{
num[i][j] = first;
j--;
first++;
}
for (k = 0; k < n - 1; ++k)
{
num[i][j] = first;
i--;
first++;
}
begin++;
pic(n - 2, begin, first);
}
int main()
{
int n = 0;
cin >> n;
pic(n, 0, 1);
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; j++)
{
cout << num[i][j] << "\t";
}
cout << endl;
}
cout << endl;
}