第一种算法:
void printArray(int n)
{
int len = n * n;
int** arr = new int*[n];
for(int i=0;i<n;i++)
{
arr[i] = new int[n];
}
int x = n/2;
int y = n/2;
int state = 0; // 方向状态
int step = 0; // 每次向前走几步
int s = 0; // 步数
int f = 0; // 向前走的次数
arr[y][x] = 0;
if(n<=0)
return ;
while(true)
{
if(n==1)
break;
printf("[%2d] ",f);
step = (int)( (float)(f+1)/2 + 0.5);
printf("[step]%2d ", step);
printf("[state]%2d ", state);
for(int k =0; k<step; k++)
{
switch(state)
{
case 0: y--; break;
case 1: x--; break;
case 2: y++; break;
case 3: x++; break;
default: break;
}
printf("[%d,%d] ", x, y);
s++;
arr[y][x] = s;
if(s >= n*n-1)
break;
}
printf("\n");
if(s >= n*n-1)
break;
f++;
state = (state > 2)? 0 : state + 1;
}
printf("\n");
for(int y=0; y<n; y++)
{
for(int x=0; x<n; x++)
{
printf("%2d ", arr[y][x]);
}
printf("\n");
}
for(int i=0; i<n; i++)
delete arr[i];
delete[] arr;
}