迷宫算法实现

定义一个二维数组:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

package com.acm;

import java.util.Stack;

public class Maze {

private static Stack<String> STACK = new Stack<String>();

private static int MAZE[][] = { { 0, 1, 0, 0, 0 }, { 0, 1, 0, 1, 0 },
{ 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 0 }, { 0, 0, 0, 1, 0 } };

public static void generate() {
int row = 0;
int erect = 0;
int size = MAZE.length;
// !(row == size && erect == size)
while (row != size - 1 || erect != size - 1) {
int now_row = row;
int now_erect = erect;
if (row + 1 < size && MAZE[row + 1][erect] == 0) {
row++;
} else if (erect + 1 < size && MAZE[row][erect + 1] == 0) {
erect++;
} else if (row - 1 >= 0 && MAZE[row - 1][erect] == 0) {
row--;
} else if (erect - 1 >= 0 && MAZE[row][erect - 1] == 0) {
erect--;
} else {
MAZE[now_row][now_erect] = 3;// DEAD
if (STACK.empty()) {
System.out.println("No resolution");
return;
}
String pop = STACK.pop();
String[] key = generateValue(pop);
row = Integer.valueOf(key[0]);
erect = Integer.valueOf(key[1]);
continue;
}
STACK.push(generateKey(now_row, now_erect));
MAZE[now_row][now_erect] = 2;
}
if (row == size - 1 && erect == size - 1) {
STACK.push(generateKey(row, erect));
}
print();
}

public static void print() {
for (String str : STACK) {
System.out.println(str);
}
}

public static String generateKey(int i, int j) {
return "[" + i + "," + j + "]";
}

public static String[] generateValue(String key) {
return key.replace("[", "").replace("]", "").split(",");
}

public static void main(String[] args) {
generate();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值