/*螺旋数组*/
#include <stdio.h>
#include <conio.h>
#define N 100
int ls[N][N];
void lssz()
{
int sum=N*N,i=0,j=0,cs=0;
while(cs<sum)
{
while(j<=N-1)
{
if (!ls[i][j])
{
ls[i][j++]=++cs;
}
else
{
j--;
break;
}
}
if (j==N)
j--;
i++;
/*从左到右*/
while(i<=N-1)
{
if (!ls[i][j])
{
ls[i++][j]=++cs;
}
else
{
i--;
break;
}
}
if (i==N)
i--;
j--;
/*从上到下*/
while(j>=0)
{
if (!ls[i][j])
{
ls[i][j--]=++cs;
}
else
{
j++;
break;
}
}
if (j<0)
j++;
i--;
/*从右到左*/
while(i>=0)
{
if (!ls[i][j])
{
ls[i--][j]=++cs;
}
else
{
i++;
break;
}
}
if (i<0)
i++;
j++;
/*从下到上*/
}
}
void main()
{
int i=0,j;
clrscr();
lssz();
for(;i<N;i++)
{
for(j=0;j<N;j++)
printf("%-5d",ls[i][j]);
puts("");
}
getch();
}
写这个想了很久的算法,这不算难
调试程序时才把我整晕了
我写错一个字母
结果不同,
我就用N=5这个矩阵自己在草稿本上测试程序
后面才找到
调试好麻烦
while(j>=0)
{
if (!ls[i][j])
{
ls[i][j--]=++cs;
}
else
{
j++; /*这儿开先我写成i++了,结果中间的往上跑了*/
break;
}
}
if (j<0)
j++;
i--;
/*从右到左*/