一、 最短路
- Floyd 算法,求解图中任意两点的最短路,可处理有向图或负权,时间复杂度 Θ(n3)
- Dijkstra 算法,求解图中某一点到其余点的最短路,时间复杂 度 Θ(mlog2 n)
- Bellman-Ford 算法,求解图中某一点到其余点的最短路,时间 复杂度 Θ(nm)
- 启发式搜索算法A*
(一)Floyd 算法
思想: 从i号顶点到j号顶点 只经过 前 k号 顶点的路径。引入k点作中间结点,更新最短路径。
核心:DP dis k+1,i,j = min { dis k,i,j , dis k,i,k+1 + dis k,k+1,j }
1 for(int k=1;k<=n;k++) 2 for(int i=1;i<=n;i++) 3 for(int j=1;j<=n;j++) 4 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);