迷宫问题——递归
问题描述:
一个8行7列的迷宫四周是围墙,从左上角的位置到达右下角,寻找一条轨迹
代码:
package cn.littleworm;
//递归实现迷宫算法
public class Maze {
public static void main(String[] args) {
//创建二维数组,8行,7列
int[][] array = new int[8][7];
//四周是墙,用1来表示
for (int i = 0; i < 8; i++) {
array[i][0] = 1;
array[i][6] = 1;
}
for (int i=0;i<7;i++){
array[0][i] = 1;
array[7][i] = 1;
}
array[3][1] = 1;
array[3][2] = 1;
System.out.println("没有进行找路之前:");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
// getWay(array,1,1);
// System.out.println("找路之后:");
// for (int i = 0; i < 8; i++) {
// for (int j = 0; j < 7; j++) {
// System.out.print(array[i][j]+" ");
// }
// System.out.println();
// }
getWay2(array,1,1);
System.out.println("找到路之后");
for (int i = 0;i<8;i++){
for (int j = 0;j<7;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
//创建出迷宫方法
/*
1、规定1为墙,2为已经走过的路,3为不通的路,0为没有探索过的路
2、若map[6][5]为2,则证明找到通路
3、出迷宫的策略:先下,在右,在上,后上
*/
//map为地图,i,j为开始的位置
public static boolean getWay(int[][] map,int i,int j){
if (map[6][5]==2){ //如果map[6][5]为2,证明找到出口
return true;
}else {
//判断当前位置是否为0;
if (map[i][j]==0){
//先将当前位置置为2
map[i][j] = 2;
//根据策略进行向下寻找
//先向下找
if (getWay(map,i+1,j)){
return true;
}else if (getWay(map,i,j+1)){
return true;
}else if (getWay(map,i-1,j)){
return true;
}else if (getWay(map,i,j-1)){
return true;
}else {
map[i][j] = 3; //如果都没有找到,那么将这个位置置为3,不通
return false;
}
}
//当前位置不为0,那么就是1,2,3,返回false
return false;
}
}
//getWay2采取的策略不同:采取上,右,下,左
public static boolean getWay2(int[][] map,int i,int j){
if (map[6][5]==2){ //如果map[6][5]为2,证明找到出口
return true;
}else {
//判断当前位置是否为0;
if (map[i][j]==0){
//先将当前位置置为2
map[i][j] = 2;
//根据策略进行向下寻找
//先向下找
if (getWay2(map,i-1,j)){
return true;
}else if (getWay2(map,i,j+1)){
return true;
}else if (getWay2(map,i+1,j)){
return true;
}else if (getWay2(map,i,j-1)){
return true;
}else {
map[i][j] = 3; //如果都没有找到,那么将这个位置置为3,不通
return false;
}
}
//当前位置不为0,那么就是1,2,3,返回false
return false;
}
}
}
注:这里面没有使用图形化界面,只是提供了逻辑代码。并且这里面也没有使用算法实现最短路径问题。这里面只有通过更改小球寻找的策略来改变寻找轨迹
下,右,上,左策略
上,右,下,左的策略