我在多次的算法比赛中遇到了蛇型矩阵问题都没有做出来,今天我在《算法竞赛入门经典》这本书上看到了,一段优美的解决蛇型矩阵问题的代码。请原谅我的无知,我看的代码少写的代码也不多。如果你认为这段代码不好不优美请多多指教。我在这里谢谢大家了。下面的代码完全取自《算法竞赛入门经典》数组那一章的示例代码。当然我在上面加了一些注释,以便大家更好的学习理解这个代码。
#include<stdio.h>
#include<string.h>
#define MAXN 10
//定义一个数组用于存储最后的结果
int a[MAXN][MAXN];
int main()
{
//n:实际蛇形矩阵的大小,x,y用来访问蛇形矩阵的数据,tot用来表示存储存储蛇形矩阵在x,y坐标下的值
int n,x,y,tot=0;
scanf("%d",&n);
//将数组a清零
memset(a,0,sizeof(a));
//这个语句有进行了三个操作,为x,y进行初始化,确定了蛇形矩阵在初始点的值,初始化tot
tot=a[x=0][y=n-1]=1;
//蛇行矩阵内的值不会超过n*n
while(tot<n*n)
{
// x+1<n表示在Y坐标不变,x坐标增大的情况下,X的坐标不会大于用户设置的范围
//a[x+1][y]表示在Y坐标不变,x坐标增大的情况下,保证内圈始终被外圈包围。外圈的值被定义下来就不会被覆盖。
//下面的代码思路一样的
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(x=0;x<n;x++)
{ for(y=0;y<n;y++)
{printf("%3d ",a[x][y]);
}
printf("\n");
}
return 0;
}
大概就是这样了,这是我第一次写博客。我知道我的博客有很多问题,还请大家帮我指出来。我在这里先谢谢大家了。
我知道我写的博客不好,但我会持续维护更新我写过的博客。希望大家多多给我提意见。谢谢大家了!