//这是第二个帖子,第一个帖子的地址是:http://bbs.itheima.com/thread-192515-1-1.html
//在做按自己的思路做完后,发现第四天的作业有螺旋矩阵的作业,看了答案后,发现它的代码很简洁,思路很巧妙
//但是它的功能是任意行列,我希望是任意行,任意列
//经过理解后,自己写了代码,发现当行数跟列数一致的时候不会出问题,行数跟列数不一致的时候有时候可以,有时候不可以
//求大牛帮忙指导下
import java.util.Scanner;
/**
*任意行任意列的内循环螺旋矩阵
*参考有限行列的内循环螺旋矩阵的思路,写出的任意行任意列的内循环螺旋矩阵
*/
class SpiralDemo01
{
public static void main(String []args) {
Scanner sn=new Scanner(System.in);
System.out.print("请输入行数:");
int y=sn.nextInt();
System.out.print("请输入列数:");
int x=sn.nextInt();
int [][]a=new int [x][y];
LXJZ(a,x,y);
for(int i=0;i<y;i++) {
for(int j=0;j<x;j++)
System.out.print(a[j]+"\t");
System.out.println();
}
}
public static void LXJZ(int [][]a,int x,int y) {//螺旋矩阵的方法
int key=0;
for(int i=0;i<x+y+1;i++) {//最多走(x+y+2)/4的循环,走一次,则有效范围缩小一次
for(int j=i;j<x-i;j++)//往右走,走到最右角
if(a[j]==0)a[j]=++key;
for(int j=i+1;j<y-i;j++)//往下走,从最右上角的下面一个数开始走,走到最右下角
if(a[x-i-1][j]==0) a[x-i-1][j]=++key;
for(int j=x-i-1-1;j>=i;j--)//往左走,从最右下角的左边一个数开始走,走到最左下角
if(a[j][y-i-1]==0) a[j][y-i-1]=++key;
for(int j=y-i-1-1;j>i;j--)//往上走,从最左下角的上面一个数开始走,走到最左上角的下面一个数【因为最左上角在开头已经走过了】
if(a[j]==0) a[j]=++key;
}
}
}
|
组图打开中,请稍候......
|