递归实现迷宫回溯问题(java实现)

本文介绍了如何使用递归解决迷宫问题,从需求分析到算法思路,再到具体的Java代码实现,详细阐述了如何在迷宫地图中找到起点到终点的通路。通过设置不同数值标记已访问、正在访问和无法访问的节点,进行回溯搜索直到找到路径或确定无解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、需求:创建一个迷宫地图,在地图中输入起点和终点,找到通路

2、算法思路分析:

如果初始点的值不为0,则直接返回false,无法走通,如果初始点的值为0,先设置初始点的值为2,继续递归查找下一个点,若不为0,则return false,使上一层递归返回false,执行下一个if else判断,寻找其他的通路,若为0,则置为2,开始递归下一层寻找路,若if else语句全部都不匹配,则说明没有一条路走通,置点的值为3,回溯到上一点,如此,直至终点的值被置为2

3、代码实现:

public class test {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
       //创造迷宫
        int row,line;//设置行和列
        System.out.println("请输入迷宫的行数");
        row=in.nextInt();
        System.out.println("请输入迷宫的列数");
        line=in.nextInt();
        int MiGong[][]=new int[row][line];
        //将上下左右设置为墙壁
        for (int i = 0; i <MiGong[0].length; i++) {
            MiGong[0][i]=1;
            MiGong[MiGong.length-1][i]=1;
  
以下是迷宫问题递归回溯算法Java实现: ```java import java.util.*; public class MazeSolver { // 迷宫的地图 private int[][] maze; // 迷宫的行数和列数 private int rows, cols; // 路径栈,用来保存从起点到终点的路径 private Stack<Point> path; public MazeSolver(int[][] maze) { this.maze = maze; this.rows = maze.length; this.cols = maze[0].length; this.path = new Stack<>(); } public void solve() { // 从起点开始搜索 Point start = new Point(0, 0); if (search(start)) { System.out.println("找到了一条从起点到终点的路径:"); for (Point p : path) { System.out.println("(" + p.x + ", " + p.y + ")"); } } else { System.out.println("没有找到从起点到终点的路径!"); } } // 搜索从当前位置开始的路径 private boolean search(Point cur) { // 如果当前位置是终点,则搜索成功 if (cur.x == rows - 1 && cur.y == cols - 1) { path.push(cur); return true; } // 如果当前位置不是终点,则尝试向四个方向搜索 if (maze[cur.x][cur.y] == 0) { // 如果当前位置是通路 maze[cur.x][cur.y] = -1; // 标记为已访问 path.push(cur); // 将当前位置加入路径 // 向右搜索 if (cur.y < cols - 1 && search(new Point(cur.x, cur.y + 1))) { return true; } // 向下搜索 if (cur.x < rows - 1 && search(new Point(cur.x + 1, cur.y))) { return true; } // 向左搜索 if (cur.y > 0 && search(new Point(cur.x, cur.y - 1))) { return true; } // 向上搜索 if (cur.x > 0 && search(new Point(cur.x - 1, cur.y))) { return true; } path.pop(); // 如果四个方向都搜索失败,则将当前位置从路径中删除 maze[cur.x][cur.y] = 0; // 标记为未访问 } return false; } public static void main(String[] args) { int[][] maze = { {0, 1, 0, 0, 0}, {0, 1, 0, 1, 0}, {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {0, 0, 0, 1, 0} }; MazeSolver solver = new MazeSolver(maze); solver.solve(); } } class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } ``` 这个程序使用了递归回溯算法来搜索迷宫中从起点到终点的路径。程序首先从起点开始搜索,如果当前位置是终点,则搜索成功;否则,程序尝试向四个方向(右、下、左、上)搜索。如果搜索成功,则返回 true;否则,程序将当前位置从路径中删除,并且将当前位置标记为未访问,然后返回 false。程序最后输出从起点到终点的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值