数组之蛇型矩阵代码(一)

我在多次的算法比赛中遇到了蛇型矩阵问题都没有做出来,今天我在《算法竞赛入门经典》这本书上看到了,一段优美的解决蛇型矩阵问题的代码。请原谅我的无知,我看的代码少写的代码也不多。如果你认为这段代码不好不优美请多多指教。我在这里谢谢大家了。

#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;
	}

    大概就是这样了,这是我第一次写博客。我知道我的博客有很多问题,还请大家帮我指出来。我在这里先谢谢大家了。

猜你喜欢

转载自blog.csdn.net/qq_39935383/article/details/84714028
今日推荐