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

博主分享了在算法比赛中遇到蛇形矩阵问题的经历,并从《算法竞赛入门经典》中找到了解决方案。文章附有书中示例代码,并添加了注释以助于理解,适合初学者学习。博主承认自己写作水平有限,欢迎大家提出改进意见,并承诺会不断更新和完善博客内容。
摘要由CSDN通过智能技术生成

我在多次的算法比赛中遇到了蛇型矩阵问题都没有做出来,今天我在《算法竞赛入门经典》这本书上看到了,一段优美的解决蛇型矩阵问题的代码。请原谅我的无知,我看的代码少写的代码也不多。如果你认为这段代码不好不优美请多多指教。我在这里谢谢大家了。下面的代码完全取自《算法竞赛入门经典》数组那一章的示例代码。当然我在上面加了一些注释,以便大家更好的学习理解这个代码。

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

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

     我知道我写的博客不好,但我会持续维护更新我写过的博客。希望大家多多给我提意见。谢谢大家了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值