蛇形填数

下面是一个有趣的算法——蛇形填数的代码(来自《算法竞赛入门经典》):

#include <stdio.h>

#define MAX 10
int main()
{
    int n, x=0, y=0, tot;
    int arr[MAX][MAX], i, j;

    //scanf("%d%d%d", &n, &x, &y); //可以输入x和y的值决定起点,默认为a[0][0]开始
    scanf("%d", &n);
    memset(arr, 0, sizeof(arr));
    tot = arr[x][y] = 1;
    while (tot < n*n) {
        while ((y+1)<n  && arr[x][y+1] == 0) arr[x][++y] = ++tot; //right
        while ((x+1)<n  && arr[x+1][y] == 0) arr[++x][y] = ++tot; //down
        while ((y-1)>=0 && arr[x][y-1] == 0) arr[x][--y] = ++tot; //left
        while ((x-1)>=0 && arr[x-1][y] == 0) arr[--x][y] = ++tot; //up
    }
    for (x=0; x<n; x++) {   //打印出填了数的矩阵
        for (y=0; y<n; y++)
            printf("%4d ", arr[x][y]);
        printf("\n");
    }
}

运行结果:

5
   1     2     3     4      5
  16   17   18   19    6
  15   24   25   20    7
  14   23   22   21    8
  13   12   11   10    9

^_^  THE END

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值