还是搜索,可以解决迷宫最短路径问题
这是核心:队列思想
一共有三个量
数组a[1000],一个head,一个tail
道理和咱们平常站队是一样的,来一个数据就加到tail的后面,如果最前面的数据不需要了,就head++,跑到下一个格子里。可能还会有点抽象。
看个图
可能看到这个会有点蒙,这有什么用呢,其实这个就是假如说我要用前面的一个数据,但是他不在前面,就需要让他前面的所有人滚出队伍,那他就排到最前面了,就可以使用他了
这是bfs里面的一个代码
理解一下
主要是右半部分的while循环,根据一个坐标,他是不是可以推出很多个不同的走法,然后把这些走法不同的记录下来,然后把那个起始的坐标移除队伍中,下一次循环用的就是刚才推出的几个坐标,以此类推,咱们不是要找最短路径吗,最短路径用的步数最少,她肯定最先找出来,只要跳出了,就是最短路径,大概就是这么个道理。
bfs和dfs的区别就是一个是撞了墙然后回头,从所有路径的比较后,找出最短的路径。另一个是走一遍所有的格子,找到最先出来的那个路径。
大概是这么个意思,加油!!!