Chinaunix首页 | 论坛 | 博客
  • 博客访问: 175309
  • 博文数量: 15
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 20:00
文章分类

全部博文(15)

文章存档

2009年(2)

2008年(13)

我的朋友

分类: Java

2008-03-05 13:33:15

关于蛇形方阵的算法与实现
    在看数据结构(java版)时,见到这样一个习题,很感兴趣,就尝试做了下.

n=4

思路如下:有一个一维数组保存要填充的数字,src[N*M]=1,,16,或者循环把digit =1..16
把结果填充到一个二维数组中,dst[N][N}.看图中的斜线,每个斜线看成一排,从左上到右下,依次为rotation=0..2*N-2.
(1)在rotation(2)在rotation为奇数时,row=0..N-1;在rotation为偶数时,row=N-1..0;只有row和col同时大于等于0且小于N,且两者之和等于rotation的组合才保留下来,不满足条件的组合则continue跳过.

源代码如下:


public class ZipZag4 {

    /**
     * @param args
     */

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int N=5;
        int row=0;
//        int col=0;

        int dig=1;
        int b[][]=new int[N][N];
        int direct=1; //转矩

        int rotation=0;//= 2*N-1; //斜排

        for(rotation=0;rotation<2*N-1;rotation++){
            if(rotation%2==direct){
                for(row=0;row>=0&row<N;row++){
                    if((rotation-row)>=0&(rotation-row)<N){
                        b[row][rotation-row]=dig;
                        dig++;
                    }
                    else
                        continue;
                }
            }
            else if(rotation%2==(1-direct))    {
                for(row=N-1;row>=0&row<N;row--){
                    if((rotation-row)>=0&(rotation-row)<N){
                        b[row][rotation-row]=dig;
                        dig++;
                    }
                    else
                        continue;
                }
            }                
        }

        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                System.out.print(b[i][j]+"\t");
            }
            System.out.println();
        }
    }

}

阅读(3308) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:python中dict和list排序

给主人留下些什么吧!~~