import java.util.Arrays;
import java.util.Stack;
/**
* 迷宫
*
* @author 风华褚胜
*/
public class MiGong {
public static void main(String[] args) {
Stack<Position> stack = new Stack<Position>(); // 保存迷宫路径
Stack<Object[]> end = new Stack<Object[]>();// 保存可通路路径
new MiGong().f(getMiGong(), 1, 1/* 是起始坐标 */, 8, 8/* 是终点坐标 */,
0/* 上一步的方向 */, stack, end);
int shor = Integer.MAX_VALUE;
int index = 0;
for (int i = 0; i < end.size(); i++) {
if (shor > end.get(i).length) {
index = i;
shor = end.get(i).length;
}
}
if (end.size() != 0) {
System.out.println("最短路径:");
System.out.println(Arrays.toString(end.get(index)));
} else
System.out.println("无通路");
}
public static int[][] getMiGong() {
// int[][] num = { { 1, 1, 1, 1, 1 },
// { 1, 0, 1, 1, 1 },
// { 1, 0, 1, 1, 1 },
// { 1, 0, 0, 0, 1 },
// { 1, 1, 0, 0, 1 },
// { 1, 1, 1, 1, 1 } };
int[][] num = { { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 0, 1, 1, 0, 1 },
{ 1, 0, 1, 0, 0, 1, 0, 0, 1 }, { 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 1 }, { 1, 1, 0, 1, 1, 0, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
return num;
}
/**
* 求取所有路径
*
* @param num
* 迷宫矩阵
* @param start_row
* 开始坐标x
* @param start_col
* 开始坐标y
* @param end_row
* 结束坐标x
* @param end_col
* 结束坐标y
* @param dro
* 上一步走的方向
* @param s
* 保存迷宫路径
* @param end
* 保存可通路路径
*/
public void f(int[][] num, int start_row, int start_col, int end_row,
int end_col, int dro, Stack<Position> s, Stack<Object[]> end) {
// System.out.println(Arrays.toString(s.toArray()));
s.push(new Position(start_row, start_col));
if (start_row == end_row && start_col == end_col) {
System.out.println(Arrays.toString(s.toArray()));
end.push(s.toArray());
s.pop();
return;
}
num[start_row][start_col] = 1;
if (dro != 2 && num[start_row - 1][start_col] == 0) {
f(num, start_row - 1, start_col, end_row, end_col, 1, s, end);
}
if (dro != 1 && num[start_row + 1][start_col] == 0) {
f(num, start_row + 1, start_col, end_row, end_col, 2, s, end);
}
if (dro != 4 && num[start_row][start_col - 1] == 0) {
f(num, start_row, start_col - 1, end_row, end_col, 3, s, end);
}
if (dro != 3 && num[start_row][start_col + 1] == 0) {
f(num, start_row, start_col + 1, end_row, end_col, 4, s, end);
}
num[start_row][start_col] = 0;
s.pop();
return;
}
/**
* 坐标点的表示类
*
* @author 风华褚胜
*/
class Position {
public int row;
public int col;
public Position(int row, int col) {
this.row = row;
this.col = col;
}
@Override
public String toString() {
return "(" + row + "," + col + ")";
}
}
}
分享到:
相关推荐
一个java程序,能够对一个4x4的矩阵进行行列互换。测试数据采用随机数据,每个单元的取值为10~100的整数。
Java技能矩阵.xlsx java开发人员必备技能 可以作为参考java开发人员必备技能 可以作为参考
Android 01矩阵迷宫,网上找了好久才找到的资源,使用A*算法,感觉不错
雅克比迭代式法求实对称矩阵的特征值特征向量
矩阵 JAVA矩阵 JAVA矩阵 JAVA矩阵 JAVA矩阵 JAVA矩阵 JAVA矩阵 JAVA矩阵 JAVA矩阵 JAVA
java实现的矩阵转换算法,包括完整的java 和class文件项目。
数据结构 用Java语言实现矩阵 可视代码数据结构 用Java语言实现矩阵 可视代码数据结构 用Java语言实现矩阵 可视代码数据结构 用Java语言实现矩阵 可视代码
java生成对称矩阵
java迷宫自动生成与寻找路径。 可以设置迷宫大小,最大为50,最小为5。 按make为自动绘制迷宫,find为寻找路径。 使用递归、随机方向的方式生成迷宫,位操作来设置上下左右的墙。 文件包括源码与jar运行程序。
Java复数矩阵库——JamPack,可用于简单的复数矩阵运算
该程序实现了Java的基本运算: 1.矩阵的相加。 2.矩阵的相减。 3.矩阵于数的相乘。 4.矩阵于矩阵的相乘。 5.矩阵的求秩。 6.矩阵的求逆(能求2阶以上的)。 7.矩阵的转秩。
每个 Java 程序都会为您提供不同的方法来解决 Java 中的特定问题。如果您是 Java 编程新手,我们强烈建议您阅读有关Java 教程的文章,其中我们通过实际示例和程序介绍了 Java 编程的所有基础知识和高级主题。
用JAVA实现螺旋矩阵的编写,这是一种比较容易让人接受的方法
压缩文件用快压打开,内包含矩阵乘法和走迷宫两个小程序
java求矩阵的特征值和特征向量源码
java 矩阵转置 java 矩阵转置 java 矩阵转置
这是一个java实现的矩阵连乘算法...欢迎大家来下载...
生成一个n阶的蛇形矩阵的java程序 输入矩阵宽度n生成宽度为n的递增的蛇形矩阵
写程序,创建一个整型5*5矩阵,并输出 本程序源文件名为 shiyan21.java,包含两个类matrix及主类shiyan21
使用java实现求矩阵的逆矩阵,使用者可根据吱声需要采纳