利用分治算法实现螺旋数组
主要通过四个for循环+递归
代码如下,与君共勉。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int num[maxn][maxn];
int n;
int ans=0;
void fun(int a,int b)
{
int i=b,j=b,k;
if(a==b+1&&n%2) //n为奇数时,且只剩下一个地方没有填充时,进不了for循环了。
{
num[b][b]=++ans;
if(ans==n*n)return;
}
for(;i<a-1;i++)
num[i][j]=++ans;
for(;j<a-1;j++)
num[i][j]=++ans;
for(;i>b;i--)
num[i][j]=++ans;
for(;j>b;j--)
num[i][j]=++ans;
if(ans==n*n)return; //n为偶数,只要判断是否已经填充满就ok了
fun(a-1,b+1);
}
int main()
{
cin>>n;
fun(n,0);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<num[i][j]<<'\t';
cout<<'\n';
}
return 0;
}