关于蛇形方阵的算法与实现
在看数据结构(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();
}
}
}
|
阅读(3353) | 评论(0) | 转发(0) |