数据结构和算法设计(迷宫求解问题的栈和队列的实现)

该博客探讨了如何使用栈进行深度优先搜索和队列进行宽度优先搜索来解决迷宫问题。通过一个二位数组表示迷宫,并分别给出起点到终点的路径及最短路径的Java实现。
摘要由CSDN通过智能技术生成

此问题中,迷宫用一个二位数组data[ ][ ]表示,data[i][j]的值为0,则表示该点为通路;如果为1,则表示该点为障碍;如果为-1,则表示该点已经走过。数组的四周值都为1,表示边界。给定起点和终点,求起点到终点的路径。

可以使用栈对二维数组进行深度优先搜索,直到找到终点的时候停止搜索。此方案找到的路径不一定是最短路径。如果要好到最短路径,可以使用队列来进行二维数组的宽度优秀搜索,直到找到终点停止搜索,然后从队列中找出我们需要的最短路径。废话少说,代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class Maze {
private int[][] data = null;//数据1:障碍,0:出路,-1:此点已经通过
private Stack<Point> stack = new Stack<Point>() ;
private List<Point> queue = new ArrayList<Point>() ;//用数组模拟队列操作

public Maze(int[][] data){   //出使化
this.data = data ;
}

public boolean getPath(Point start , Point end){
boolean isFind = false ;//是否找到
Point temp = null;

stack.push(start) ;//将起点入栈
this.data[start.getX()][start.getY()] = -1 ;//起点标记为走过
while(!stack.isEmpty()){//栈不为空时进入循环

temp = stack.lastElement() ;//得到栈顶元素
int x = temp.getX() ;
int y = temp.getY() ;
int di = temp.getDirection() ;//得到方向

if(temp.equals(end)){//找到终点
printPath() ;
return true ;
}

isFind = false ;
while(di<4 && !isFind){//当方向没有找完,而且没有找到
di++ ;//下一个方向寻找
switch(di){
case 0: x = temp.getX() - 1 ; y = temp.getY() ; break ;//向上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值