java 螺旋方阵_JAVA 打印 M*N的螺旋矩阵(递归) 效率低得很 | 学步园

本文介绍了如何使用JAVA编程实现螺旋矩阵的打印,通过递归方法解决,详细展示了代码实现过程,包括关键函数`solve()`的递归逻辑。虽然效率不高,但能正确处理小规模数据。请注意,由于递归深度限制,输入数据应控制在1<=m*n<=6400范围内,避免堆栈溢出错误。
摘要由CSDN通过智能技术生成

import java.io.*;

import java.util.*;

public class LXM {

int m;

int n;

int jz[][];

int num;

LXM()throws IOException{

Scanner cin = new Scanner(new BufferedReader(new InputStreamReader(System.in)));

while(true){

m=cin.nextInt();

n=cin.nextInt();

if(m==0&&n==0){

System.out.println("Game over!");

break;

}

jz = new int [m][n];

solve();

for(int i=0;i

for(int j=0;j

System.out.print(jz[i][j]);

if(j!=n-1)System.out.print("/t");

}

System.out.println();

}

}

}

void solve(int x,int y,int z){

jz[x][y]=num;

num++;

/*

*依次递归赋值

*/

switch(z){

case 6:

if(y+1<=n-1&&jz[x][y+1]==0)

solve(x,y+1,z);

else

if(x+1<=m-1&&jz[x+1][y]==0)

solve(x+1,y,2);

break;

case 2:

if(x+1<=m-1&&jz[x+1][y]==0)

solve(x+1,y,z);

else

if(y-1>=0&&jz[x][y-1]==0)

solve(x,y-1,4);

break;

case 4:

if(y-1>=0&&jz[x][y-1]==0)

solve(x,y-1,z);

else

if(x-1>=0&&jz[x-1][y]==0)

solve(x-1,y,8);

break;

case 8:

if(x-1>=0&&jz[x-1][y]==0)

solve(x-1,y,z);

else

if(y+1<=n-1&&jz[x][y+1]==0)

solve(x,y+1,6);

break;

}

}

void solve(){

num=1;

solve(0,0,6); //逆时针方向 从(0,0)开始右边开始

}

public static void main(String[] args) throws IOException{

new LXM();

}

}

-----------------------------------------我 分 隔 你 哟 -------------------------------------------------------------------

输入:

5 5

0 0

输出:

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

Game over!

-----------------------------------------我 分 隔 你 哟 -------------------------------------------------------------------

由于使用递归,所以数据不能很大,不然堆栈溢出错误。

建议数据范围在1<=m*n<=6400

由于JAVA 数组定义不能很大 所以也有限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值