迷宫问题,简单dfs

迷宫问题
有一天,小哈一个人去玩迷宫,但是方向感很差的小哈很快就迷路了,小哼得知后,便立即去解救被困的小哈,小哼自然是有备而来,已经弄清楚了迷宫的地图,现在小哼要以快的速度去解救小哈。问题就此开始了。。。。
迷宫由n行和m列单元格组成(m和n都小于等于50),每个单元格要么是空地要么是障碍物。你的任务是帮助小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。注意障碍物是不能走的,当然小哼也是不能走到迷宫之外。
简单迷宫问题,dfs。
代码如下:

#include<stdio.h>
int n,m,p,q,min=99999999;
int a[51][51],book[51][51]
void dfs(int x,int y,int step)
{
   
	int next[4][2] = {
   {
   0,1},//向右
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用深度优先搜索(DFS)解决迷宫问题的Java代码示例: ```java import java.util.Stack; public class MazeSolver { private int[][] maze; private boolean[][] visited; private int startRow, startCol; private int endRow, endCol; public MazeSolver(int[][] maze, int startRow, int startCol, int endRow, int endCol) { this.maze = maze; this.visited = new boolean[maze.length][maze[0].length]; this.startRow = startRow; this.startCol = startCol; this.endRow = endRow; this.endCol = endCol; } public boolean solve() { Stack<Integer> stack = new Stack<>(); stack.push(startRow); stack.push(startCol); while (!stack.isEmpty()) { int col = stack.pop(); int row = stack.pop(); if (row < 0 || col < 0 || row >= maze.length || col >= maze[0].length) { continue; } if (visited[row][col] || maze[row][col] == 1) { continue; } visited[row][col] = true; if (row == endRow && col == endCol) { return true; } stack.push(row + 1); stack.push(col); stack.push(row - 1); stack.push(col); stack.push(row); stack.push(col + 1); stack.push(row); stack.push(col - 1); } return false; } public static void main(String[] args) { int[][] maze = { {0, 1, 0, 0}, {0, 1, 0, 1}, {0, 0, 0, 0}, {0, 1, 1, 0} }; MazeSolver solver = new MazeSolver(maze, 0, 0, 3, 3); if (solver.solve()) { System.out.println("Maze solved!"); } else { System.out.println("Maze cannot be solved!"); } } } ``` 这个示例中,我们使用了一个栈来实现DFS算法,每次从栈中弹出一个坐标,然后检查是否越界、已经访问过或者是墙壁,如果是,则忽略这个坐标,否则标记为已访问并将其四周的坐标入栈。如果最终栈为空,则说明无法从起点到达终点,否则,说明找到了一条能够从起点到达终点的路径。 这只是一个简单的示例,实际上,如果要解决更复杂的迷宫问题,需要使用更高级的算法来优化搜索过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值