• 迷宫算法


    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 }
  • 相关阅读:
    【NOIP2017】蚯蚓
    【CF407B】Long Path
    【NOIP2017】奶酪
    【NOIP2018】赛道修建(正解)
    【NOIP2018】旅行
    【SDOI2010】地精部落
    【NOIP2017】逛公园
    百度云网盘进行注销操作
    百度超级会员租借.我租给你。
    如何在dos中运行java中的jar包
  • 原文地址:https://www.cnblogs.com/weijuanran/p/Maze.html
Copyright © 2020-2023  润新知