A*算法和dijkstra算法

A*算法和dijkstra算法都是启发式搜索,dijkstra算法可以看成是广度优先搜索,而A*可以认为是深度优先搜索。
dijkstra就是保证当前节点的值对于前面的层一定是最优的(不管后面有啥只往前看),所以最后到终点的时候,可以保证终点到前一层选一个最优的点,这样从终点到起点一直选当前最小得到的路径一定是最优的。
A*可以轻松地用在比如无人机航路规划中,而dijkstra建立在较为抽象的图论层面。
A*算法主要是有两张表, 一个open表,一个是close表。
1. 将起点加入open表。
2. a)遍历open list,找F(F = G + H)值最小的节点,把他作为当前要操作的节点;
2. b)把这个节点移到close list;
2. c)把当前操作节点周围的8个节点放到open list中(除了不可达的节点,比如墙、禁飞区等);
2. d)重复上述操作,每次都去F值最小的节点作为当前操作节点。
3. 当终点加入到close表中的时候停止。
4. 保存路径,从终点开始,每个节点沿着父节点移动到起点,就是最终路径。
上面F = G + H中:H是启发函数,是当前点到终点距离的估计,一般采用曼哈顿距离(当前点和终点横纵坐标差之和);G就是起点到当前点的距离,这里G值的度量方式一般是上下左右取一个值比如10,对角线的四个点取一个值比如14(一般比上下左右的值要大),而在A*中表示障碍点一般会给对应点一个特别大的G值,所以在筛选的时候就会放掉
A*算法和dijkstra算法_第1张图片
A*算法和dijkstra算法_第2张图片
GIF图:https://blog.csdn.net/hopeping128/article/details/78960326

你可能感兴趣的:(航路规划)