博客看的:
d[v] = d[u] + w 其中d[v]表示从起点到点v的距离,w为u点到v点的距离
h[u]表示点u到终点的距离 (为曼哈顿距离)
从起点开始每次都选择d[u] + h[u]最小的相邻点为待处理结点,并且更新待处理结点相邻结点的d
并将被更新的相邻结点v的父节点变为u
if(d[v] < d[u] + w) {d[v] = d[u] + w; f[v] = u;}
注意每个点走一次,忽略障碍物,直至走到终点t,则从f[t]开始遍历f即为最优路径
算法设计课讲解:
d[u]为起点s沿u的前一个结点这条路径到达u的距离
h[u]为u的最小出边
每次相邻的走d[u] + h[u]最小的边即可(dijkstra是一种退化的A*,走h[u]最小的边)