package com.m.demo7;
public class maze {
/**
* 0表示没有走过,1表示墙壁,2表示可以走,3表示不能走
* 首先建立地图,设置起点和终点,使用递归不断回溯确定点能不能走通
* @param args
*/
public static void main(String[] args) {
int [][] map=new int[8][7];
// 左右 上下是墙
for(int i=0;i<8;i++) {
map[i][0]=1;
map[i][6]=1;
}
for(int i=0;i<7;i++) {
map[0][i]=1;
map[7][i]=1;
}
map[3][1]=1;
map[3][2]=1;
// 打印map;
for(int j=0;j<8;j++) {
for(int k=0;k<7;k++) {
System.out.print(map[j][k]+" ");
}
System.out.println();
}
// 开始探测
System.out.println("==============");
setPoint(map,5,4);
// setWay(map,1,1);
// 打印map;
for(int j=0;j<8;j++) {
for(int k=0;k<7;k++) {
System.out.print(map[j][k]+" ");
}
System.out.println();
}
}
public static boolean setPoint(int[][] map,int i,int j) {
// 如果到达(6,5)成功 退出条件,或者所有点是3,不能走
if(map[6][5]==2) {
return true;
}else {
if(map[i][j]==0 ) {
map[i][j]=2;//从第一个点开始设置
// 探测下一个点的顺序 上 下 左 右
if(setPoint(map,i-1,j)) {
return true;
}else if(setPoint(map,i+1,j)) {
return true;
}else if(setPoint(map,i,j-1)) {
return true;
}else if(setPoint(map,i,j+1)) {
return true;
}else {
map[i][j]=3;
return false;
}
}else {
return false;
}
}
}
public static boolean setWay(int[][] map, int i, int j) {
if(map[6][5] == 2) { // 通路已经找到ok
return true;
} else {
if(map[i][j] == 0) { //如果当前这个点还没有走过
//按照策略 下->右->上->左 走
map[i][j] = 2; // 假定该点是可以走通.
if(setWay(map, i+1, j)) {//向下走
return true;
} else if (setWay(map, i, j+1)) { //向右走
return true;
} else if (setWay(map, i-1, j)) { //向上
return true;
} else if (setWay(map, i, j-1)){ // 向左走
return true;
} else {
//说明该点是走不通,是死路
map[i][j] = 3;
return false;
}
} else { // 如果map[i][j] != 0 , 可能是 1, 2, 3
return false;
}
}
}
}
递归之迷宫问题
最新推荐文章于 2022-05-03 19:46:19 发布
本文介绍了如何使用Java编程语言实现一个递归的迷宫路径查找算法,通过设置起点和终点,逐步扩展路径直到到达目标。通过setPoint和setWay方法,展示了如何利用回溯和优先策略寻找可行路径并避开墙壁。
摘要由CSDN通过智能技术生成