迷宫算法

Posted weijuanran

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迷宫算法相关的知识,希望对你有一定的参考价值。

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	");
37                     }else if(maze[i][j]==1){
38                         System.out.print("*	");
39                     }else{
40                         System.out.print("/	");
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 }

 

以上是关于迷宫算法的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB | prim算法迷宫生成及其艺术渲染

数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)

使用递归的迷宫深度优先路径算法

第一个算法项目 | JS实现并查集迷宫算法Demo学习

PHP树生成迷宫及A*自己主动寻路算法

迷宫生成与路径规划算法-Python3.8-附Github代码