我的算法日常 — 螺旋数字串
描述
思路
- 螺旋递增也就是,下–左–上–右–下递增
- 也就是只有四种递增方向
- 接着寻找每一种的递增截至的条件
- 发现当且仅当x,y满足关于n和0的关系并且前面的数据还没有被赋值时
实现C代码
#include<stdio.h>
#include<string.h>
# define maxn 20
int a[maxn][maxn];
int main()
{
int n, x, y, tot = 0;
scanf("%d", &n);
memset(a, 0, sizeof(a));
tot = a[x=0][y=n-1] = 1;
while(tot < n*n)
{
while(x+1<n && !a[x+1][y]) a[++x][y] = ++ tot;
while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot;
while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++ tot;
while(y+1<n && !a[x][y+1]) a[x][++y] = ++tot;
}
for(int i = 0;i < n;i ++)
{
for(int j = 0;j < n;j ++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
}