蛇形数组算法总结
某天看到这种题要求利用编程打印出如图效果
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
后来看到一个帖子终于明白了
我找了一下规律,把它推广到任意阶的方阵
主要看转弯地方数字的下标
左上角 : 16 a10
24 a21 i=j+1且i+j<N
右上角: 5 a04
19 a13 i+j=N-1且i<j
右下角: 21 a33
9 a44 i=j
左下角: 13 a40
23 a31 i+j=N-1 且i>j
代码如下
class Matrix {
public static void main(String[] args) {
Matrix a=new Matrix();
a.sheXing(12);
}
public void sheXing(int N)
{
int i,j,m,d;
int matrix[][] = new int[N][N];
i = 0;
j = 0;
m = 1;
d = 1;
while(m <= N*N){
matrix[i][j] = m;
switch(d){
case 1: if((i+j)==(N-1)&&(i<j))
{i=i+1;
d=2;
}
else
j=j+1;
break;
case 2: if(i==j)
{
j=j-1;
d=3;
}
else
i=i+1;
break;
case 3: if((i+j)==(N-1)&&(i>j))
{
i=i-1;
d=4;
}
else
{
j=j-1;
}
break;
case 4: if((i==(j+1))&&((i+j)<N))
{
j=j+1;
d=1;
}
else
{
i=i-1;
}
break;
}
m++;
}
for(int a = 0;a<N;a++)
{
for(int b = 0;b<N;b++)
System.out.print(matrix[a][b]+" ");
System.out.print("\n");
}
}
}
public static void main(String[] args) {
Matrix a=new Matrix();
a.sheXing(12);
}
public void sheXing(int N)
{
int i,j,m,d;
int matrix[][] = new int[N][N];
i = 0;
j = 0;
m = 1;
d = 1;
while(m <= N*N){
matrix[i][j] = m;
switch(d){
case 1: if((i+j)==(N-1)&&(i<j))
{i=i+1;
d=2;
}
else
j=j+1;
break;
case 2: if(i==j)
{
j=j-1;
d=3;
}
else
i=i+1;
break;
case 3: if((i+j)==(N-1)&&(i>j))
{
i=i-1;
d=4;
}
else
{
j=j-1;
}
break;
case 4: if((i==(j+1))&&((i+j)<N))
{
j=j+1;
d=1;
}
else
{
i=i-1;
}
break;
}
m++;
}
for(int a = 0;a<N;a++)
{
for(int b = 0;b<N;b++)
System.out.print(matrix[a][b]+" ");
System.out.print("\n");
}
}
}