- public class Maze {
- public static int judge(int[][] arr,int i,int j,int[] a){
- int[] b=new int[2];//记录走过的路
- if(arr[i][j]==1){//判断如果是墙的话,返回0
- return 0;
- }
- if(i==5&&j==5){//判断如果到出口返回1
- return 1;
- }
- //分别判断上下左右四个方向的情况,如果有墙的话,就走不通。
- //他所走过的时候如果前面有路,是不会往回走的
- if(!(arr[i-1][j]==1||(i-1==a[0]&&j==a[1]))){//判断向上走的情况
- b[0]=i;
- b[1]=j;
- if(judge(arr,i-1,j,b)==1)
- return 1;
- }
- if(!(arr[i][j+1]==1||(i==a[0]&&j+1==a[1]))){//就判断向右走的情况
- b[0]=i;
- b[1]=j;
- if(judge(arr,i,j+1,b)==1)
- return 1;
- }
- if(!(arr[i+1][j]==1||(i+1==a[0]&&j==a[1]))){//判断向下走的情况
- b[0]=i;
- b[1]=j;
- if(judge(arr,i+1,j,b)==1)
- return 1;
- }
- if(!(arr[i][j-1]==1||(i==a[0]&&j-1==a[1]))){//判断向左走的情况
- b[0]=i;
- b[1]=j;
- if(judge(arr,i-1,j,b)==1)
- return 1;
- }
- return 0;
- }
- public static void main(String[] args) {
- int[][] arr = { { 1, 1, 1, 1, 1, 1, 1 }, //把迷宫用二维数组表示
- { 1, 0, 1, 0, 0, 0, 1 },
- { 1, 0, 1, 0, 1, 1, 1 },
- { 1, 0, 0, 0, 1, 0, 1 },
- { 1, 0, 1, 0, 0, 0, 1 },
- { 1, 0, 1, 0, 1, 0, 1 },
- { 1, 1, 1, 1, 1, 1, 1 } };
- int[] a={0,1};//记录走过的前一格坐标。第一格的前一格假定为0,1
- System.out.println(judge(arr,1,1,a));//从1,1开始
- }
- }
复制代码 题目是用递归得出迷宫从入口到出口的路径,是原图那样的,不过那样的话要判断数组越界问题,就人为加了一圈墙。墙用1表示,可以走的用0表示,现在是递归到出口后怎么解决记录路径的问题,可能前面的代码也不一定对,大家帮忙看下
|