//法一:螺旋矩阵递归做法,其实可以不用递归
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void LuoXuanArray(int a[], int n)
{
static int m = 0;
static int p = 0, q = n-1;
int i = p, j = p;
//递归结束条件
if(p>q) //维数为偶数的时候
return;
if(p == q) //维数为奇数的时候
{
m++;
a[i*n + j] = m;
return;
}
//递归本身
for(; i < q+1; i++)
{
m++;
a[i*n + j] = m;
}
i--;
j++;
for(; j< q+1; j++)
{
m++;
a[i*n + j] = m;
}
j--;
i--;
for(; i>=p; i--)
{
m++;
a[i*n + j] = m;
}
i++;
j--;
for(; j>=p+1; j--)
{
m++;
a[i*n + j] = m;
}
p = p+1;
q = q-1;
LuoXuanArray(a, n);
}
int _tmain(int argc, _TCHAR* argv[])
{
int dim;
cout<<"Please input the number:"<<endl;
cin>>dim;
int a[255];
for(int j = 0; j < dim*dim; j++)
{
a[j] = 0;
}
LuoXuanArray(a, dim);
int i = 0;
for(; i < dim*dim; i++)
{
if(i%dim == 0)
cout<<endl;
cout<<a[i]<<"\t";
}
return 0;
}
//法二:螺旋矩阵非递归做法
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void LuoXuanArray(int a[], int n)
{
int m = 0;
int p = 0, q = n-1;
int i, j;
while(p<q)
{
i = p, j = p;
for(; i < q+1; i++)
{
m++;
a[i*n + j] = m;
}
i--;
j++;
for(; j< q+1; j++)
{
m++;
a[i*n + j] = m;
}
j--;
i--;
for(; i>=p; i--)
{
m++;
a[i*n + j] = m;
}
i++;
j--;
for(; j>=p+1; j--)
{
m++;
a[i*n + j] = m;
}
p = p+1;
q = q-1;
}
if(p>q) //维数为偶数的时候
return;
if(p == q) //维数为奇数的时候
{
m++;
a[(n-1)/2*n + (n-1)/2] = m;
return;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int dim;
cout<<"Please input the number:"<<endl;
cin>>dim;
int a[255];
for(int j = 0; j < dim*dim; j++)
{
a[j] = 0;
}
LuoXuanArray(a, dim);
int i = 0;
for(; i < dim*dim; i++)
{
if(i%dim == 0)
cout<<endl;
cout<<a[i]<<"\t";
}
return 0;
}