GLORY | 学习·记录

coding for life

《算法竞赛入门经典》-读书笔记-蛇形填数

一开始在家里面有了一点思路,用两重循环。后来真正开始在纸上写代码的时候发现只要一重循环即可。 

#include<stdio.h>

int main()
{

    
int a[10][10];
    
int dx[]={1,0,-1,0};
    
int dy[]={0,-1,0,1};
    
int value=1;
    
int i,j,n,x,y;

    scanf(
"%d",&n);
    
for(i=1;i<=n;i++)
        
for(j=1;j<=n;j++)
            a[i][j]
=0;

    
//初始位置为(1,n),初始值为1
    x=1;
    y
=n;
    i
=0;
    a[x][y]
=value++;

    
//循环结束的条件为n*n个值已经赋完
    while(value<=n*n)
    {
        
//按照当前的方向进行探测
        x+=dx[i];
        y
+=dy[i];

        
//如果符合条件,赋值
        if(x>=1 && x<=&& y>=1 && y<=&& a[x][y]==0)
            a[x][y]
=value++;
        
//如果不符合条件,把坐标退回,方向进行逆时针旋转
        else
        {
            x
-=dx[i];
            y
-=dy[i];
            i
=(i+1)%4;
        }
        printf(
"\nvalue=%d\n",value);
    }

    
for(i=1;i<=n;i++)
    {
        
for(j=1;j<=n;j++)
            printf(
"%d ",a[i][j]);
        printf(
"\n");
    }

    
return 0;

}

 后来看到书上的sample代码,我觉着我的代码显然要好很多:-)

posted on 2010-03-29 22:53 meglory 阅读(901) 评论(0)  编辑 收藏 引用 所属分类: Algorithms


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

随笔分类

随笔档案

最新评论