序
繁花落尽,留下谁的足迹,珍藏于谁的记忆。
嗨,这里还是狐狸~~
大家都用过或者都知道《百度地图》、《高德地图》这些APP吧,用的最多的莫过于其中的导航功能了,它可以帮你快速有效的找到你所需要的一条路径,用的时候十分的方便,那大家有想过其中的原理是什么吗,别人可以不知道,但程序员必须懂的——智能寻路算法,今天我就来分享有关智能寻路算法的知识。
广度搜索算法
当然啦,智能寻路算法也有很多种,我们挑其中的一种方式来详细讲解,那就是广度搜索算法。
广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历算法这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般用队列数据结构来辅助实现BFS算法。
基本步骤
(1)给出一连通图,如图,初始化全是白色(未访问);
(2)搜索起点V1(灰色);
(3)已搜索V1(黑色),即将搜索V2,V3,V4(标灰);
(4)对V2,V3,V4重复以上操作;
(5)直到终点V7被染灰,终止;
(6)最短路径为V1,V4,V7.
迷宫
好像单纯讲这些,大家会觉得很枯燥,那么下面我就用一个小游戏的项目来告诉大家如何在实际项目中运用这个寻路算法,《迷宫》相信大家都玩过,今天我们来点不一样的,我们今天写的项目是自己来创建迷宫,然后运用寻路算法来找到一天正确而又最短的路径出来。
先向大家看下我们项目运行的效果图吧,这是我们的开始界面
大家可能会觉得很low,但这不重要,界面啥的可以自己去优化,找些好看的素材就好了,嘻嘻,本人的审美不是很好,希望大家多多见谅!
然后我们按下s键都就可以来绘制我们的迷宫了,可以随意绘制,这都是没有问题的,但别把路都堵死了
按下E之后设置我们的起点和终点,In代表起点,Out代表终点