type
status
date
slug
summary
tags
category
icon
password
小白的第一篇文章,记录一下自己学习过程中遇到的问题!
前言
这几天学了栈和队列,正所谓在实践中检验真理,我们这种小白当然得多敲代码才能成为我们身边的那些大佬,的跟班。回到正文,其实是使用队列进行广度优先遍历进行寻路时遇到了一个小问题,就是找到出口后该如何把最优路径和所有走过的路区别出来呢?
一、思路
队列寻路的思路我的理解就是创建一个队列存放位置(二维地图数组的下标),从入口入队开始,封装一个返回值为布尔型的函数去寻找周围的路。
函数中当前点出队,然后判断这个点的上下左右四个方向是否有空地,有就入队(这里需要注意数组越界的情况,并且队列和点的位置记得传引用或指针),走到一个点就将其给一个固定的值,表明这个点已经走过了,不再把它当成空地,如果这四个方向中有出口点,那么返回true,否则函数执行完后返回false。
用一个变量如s去接收这个值。这样我们就可以写一个while循环,条件是!s,即s为true时结束循环,循环体就把此函数赋值给s即可。
二、最优路径
所以我们理解了上述步骤后,就进入正题——找到出口后如何显示那条最优路径。
我们其实可以通过计数来解决这个问题。这个步骤可以放到上面提到的那个函数中实现,不用某个固定的值去表明某个点已经走过。将起始点的值改变一下,让它的值后面不要有出口或墙这些元素,在四个方向中的某个入队时,给一个值比当前点的值多1,直到循环找到出口时,此时的坐标表示应该是出口的上一个点。
创建一个栈存放位置(二维地图数组的下标),从那个点入栈开始,判断它的上下左右四个方向,找到值比它小一的点,然后将位置改到这个点,直到当前点的位置回到起始点(入口)。这个步骤也需封装成函数放入循环中执行。最后得到的栈存放的就是最优路径了,我们将其渲染出来即可。
三、代码
四、结果图

第一次写文章还有很多不足,表达描述肯定也有很多不清楚的地方,以后我会多多锻炼,如果有什么错误或者问题还请大佬们指出哈!
- Author:lzzd
- URL:https://lazy-zed.com/article/c%2B%2B_7
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!