迷宫的解

1.解法有三种,分别是递归调用的深度优先遍历(顺时针搜索四个方向,如果有门则进入,没有搜索到则回溯一步),非递归调用的深度优先遍历(利用栈的先进后出),广度优先遍历(利用队列的先进先出)

#非递归调用的深度优先遍历
stack.push(入口)
while(!stack.empty)
    curPos = stack.pop()
    if(curPos == 出口)break
    对和curPos相邻的每一个可能的方向
         if(newPos可达)
            stack.push(newPos)
#广度优先遍历
queue.enqueue(入口)
while(queue.size() != 0)
   curPos = queue.dequeue()
   if(curPos == 出口)break
   对和curPos相邻的每一个可能的方向
            if(newPos可达)
            stack.enqueue(newPos)
#统一表述,q表示抽象队列
#抽象队列:可入队,可出队。LIFO(stack),FIFO(queue),优先队列(堆是实现优先队列的一个方式)都可以成为一个抽象队列,出队的规则不同。
q.add(入口)
while(!q.empty())
    curPos = q.remove()
    if(curPos == 出口)break
    对和curPos相邻的每一个可能的方向
       if(newPos可达)
           q.add(newPos)

2.如果有多条路径,则广度优先遍历求出来的是最短路径
3.对于无权图求最短路径–广度优先遍历,对于有权图求最短路径–迪杰特斯拉算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值