迷宫算法

Java实现迷宫算法

 1 package com.java;
 2 
 3 /**
 4  * 回溯法解决,迷宫算法
 5  *
 6  * 算法步骤:
 7  * 1、首先将起点加入路径,并设置为已走
 8  * 2、判断当前点是否为终点出口,若是则输出路径,打印输出结果,否则进行下一步
 9  * 3、依次判断当前点的上、下、左、右四个点是否可走,如果可走则分别递归走
10  * 4、若当前路径不通,则向上回溯,并将之前设置的已走改为未走,以便下一条路径可访问
11  */
12 public class Maze3 {
13 
14     public static int count=0;//找到的路径计数
15 
16     public static void main(String[] args) {
17         // 初始化一个迷宫地图
18         int[][] maze = { { 2, 2, 2, 2, 2, 2, 2, 2, 2 },
19                 { 2, 0, 0, 0, 0, 0, 0, 0, 2 }, { 2, 0, 2, 2, 0, 2, 2, 0, 2 },
20                 { 2, 0, 2, 0, 0, 2, 0, 0, 2 }, { 2, 0, 2, 0, 2, 0, 2, 0, 2 },
21                 { 2, 0, 0, 0, 0, 0, 2, 0, 2 }, { 2, 2, 0, 2, 2, 0, 2, 2, 2 },
22                 { 2, 0, 0, 0, 0, 0, 0, 0, 2 }, { 2, 2, 2, 2, 2, 2, 2, 2, 2 } };
23         FindPath(maze,1,1,7,7);
24         System.out.println("一共找到"+count+"条路径");
25     }
26     public static void FindPath(int[][] maze,int si,int sj,int ei,int ej){
27         //将当前的点加入路径,设置为已走
28         maze[si][sj]=1;
29         //当前找到一条路径
30         if(si==ei&&sj==ej){
31             count++;
32             System.out.println("找到了一条路径(*表示的是一条通路):");
33             for (int i = 0; i < maze.length; i++) {
34                 for (int j = 0; j < maze[i].length; j++) {
35                     if(maze[i][j]==2){
36                         System.out.print("2\t");
37                     }else if(maze[i][j]==1){
38                         System.out.print("*\t");
39                     }else{
40                         System.out.print("/\t");
41                     }
42                 }
43                 System.out.println();
44             }
45         }
46         //左边
47         if(maze[si][sj-1]==0){
48             FindPath(maze,si,sj-1,ei,ej);
49         }
50         //右边
51         if(maze[si][sj+1]==0){
52             FindPath(maze,si,sj+1,ei,ej);
53         }
54         //左边
55         if(maze[si-1][sj]==0){
56             FindPath(maze,si-1,sj,ei,ej);
57         }
58         //左边
59         if(maze[si+1][sj]==0){
60             FindPath(maze,si+1,sj,ei,ej);
61         }
62         //当走到死胡同,向上回溯,并把当前节点设为0
63         maze[si][sj]=0;
64     }
65 
66 }

 

posted @ 2018-09-27 10:45  几忆年少红尘客  阅读(209)  评论(0编辑  收藏  举报