广度优先算法:
四周扩散,每次步进一格,能找到起点到终点的最短路径。不能计算路径的cost。
dijkstra算法:
三个set,总set,已确定最小cost set,未确定最小cost set。
四周扩散,优先从未确定最小cost set中pop出到起点cost最小节点,加入已确定set,并更新此节点周围未确定最小cost的节点cost。
精髓在于每次迭代,都优先pop最小cost,保证已确定cost set节点一定能最小cost。
能计算每个点到起点的cost最小距离。如果每个节点的cost一样,则退化到广度优先算法。
A*算法:
思路与dijkstra一样。
添加每个点到终点的cost估计值,优先pop出(到起点+到终点)cost最小节点,并更新周围未确定最小cost的节点cost。
dijkstra四周扩散式的计算所有点到起点的cost,实际如果只需要计算单个终点到起点的最小cost路径,就浪费算力。
强行添加一个到终点cost的估计值,强行增大不靠近终点方向节点cost,强行优先pop出来靠近终点的节点,减少无谓的节点计算,提高收敛速度。
如果不添加到终点cost的估计值,则退化为dijkstra算法。