java 迷宫的走法

小弟写了一个迷宫的算法 向大家请教

import java.util.Arrays;
import java.util.Scanner;

public class Migong {

/**
* 求迷宫的打印方法
* 01 02 03 04 05 00 01 02 03 04 5 4 4 3 3 2 2 1 1 //5阶迷宫每转一次湾 就要走的步数
* 16 17 18 19 06 10 11 12 13 14 4 3 3 2 2 1 1 //4阶迷宫每转一次湾 就要走的步数

* 15 24 25 20 07 20 21 22 23 24 3 2 2 1 1 //3阶迷宫每转一次湾 就要走的步数

* 14 23 22 21 08 30 31 32 33 34 2 1 1//2阶迷宫每转一次湾 就要走的步数

* 13 12 11 10 09 40 41 42 43 44 1//1阶迷宫每转一次湾 就要走的步数

*/
private static String[][] migong;
private static Integer n;
private static enum direct {
left,right,up,down
}
public static void main(String[] args) {
System.out.print("请输入迷宫的阶数:");
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
init_migong(n);
//第一次走n 步 以后每两次转弯少走一步
int step = n;
int num = 1;
int heng = 0; //横坐标
int zong = 0; //纵坐标
int upwan = 0;
int leftwan = 0;
//走的次数为 2 * n -1
for(int i = 0 ;i<(2 * n -1);i++){
String dir = next(i);
if(dir.equals("right")){
if(i==0){
zong = 0;
}else{
zong = zong + 1;
}
for(int j = 1;j<= (step);j++){
migong[heng][zong] = add_zero(num);
zong++;
num++;
}
}else if(dir.equals("down")){
heng = heng + 1;
zong = zong -1;
for(int j = 1;j<= step;j++){
migong[heng][zong] = add_zero(num);
heng++;
num++;
}
}else if(dir.equals("left")){
heng = heng -1;
zong = zong -1;
for(int j = step;j>=1;j--){
migong[heng][zong] = add_zero(num);
zong--;
if(1 == j){
zong = leftwan;
}
num++;
}
leftwan = leftwan +1;
}else if(dir.equals("up")){
upwan = upwan +1;
heng = heng -1;
for(int j = step;j>=1;j--){
migong[heng][zong] = add_zero(num);
heng--;
if(1 == j){
heng = upwan;
}
num++;
}
}
if(i%2==0){
step = step -1;
}
}
printmigong();
}

private static String next(int i){
int mod = i % 4;
String dir = "left";
switch (mod) {
case 0:
dir = direct.right.toString();
break;
case 1:
dir = direct.down.toString();
break;
case 2:
dir = direct.left.toString();
break;
case 3:
dir = direct.up.toString();
break;
}
return dir;
}
private static String add_zero(Integer num){
Integer temp = n * n;
String s = temp.toString();
Integer len = s.length();
Integer l = num.toString().length();
String zero = "";
for(int i = 1;i<=len -l;i++ ){
zero = zero + "0";
}
return zero + num;
}
private static void printmigong(){
for(int i = 0 ;i<migong.length;i++){
System.out.println(Arrays.toString(migong[i]));
}
}
private static void init_migong(Integer n) {
migong = new String[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
migong[i][j] = "-1";
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值