1、最短路径问题介绍
问题解释:
从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径
这里主要介绍解决最短路径问题的一个经典算法Floyd
2.算法描述
1)算法思想原理:
Floyd算法是一个经典的动态规划算法。实现该算法需要首先设置记录最短路径的长度的距离矩阵D,假设i,j两点,那么i点到j点的路径无外乎两种情况,一种是 i直接到j,另一种便是通过中间节点k到j点,两句话概括算法思想,就是不断更换中间节点k,比较D(i,j)和D(i,k)+D(k,j)的大小,如果D(i,k)+D(k,j)小于D(i,j),那么便更新D(i,j),循环结束后,矩阵D中便是记录了各点之间的最短路径了。
2).算法描述:
a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
b.对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
算法核心代码
for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(A[i][j]>A[i][k]+A[k][j]) A[i][j]=A[i][k]+A[k][j]; path[i][j]=k; } } }惊呆了,没错,就这几行!