dijkstra思想:
(该图是为了更好的说明,其中的字母是为了方便下面讲述)
dijkstra算法就是求一个点到其它所有点的最短路径
由上图,假如说我们用dijkstra算法求从A点到其他各点的最短路径:先求出A点能够直达的点,也就是B,C,他们的边分别为a,b。从直达点的路径中选择一条最短的,该处假设a>b,所以应该选b这条边,其也就是A点到C点的最短路径。(有同学可能就就会问你怎么就能确定b这条边就是最短路径,我可能经过a再经过g到达C点的距离比b短。 那我就想说了,咱们在上面已经说过a>b了,所以a+g>b,所以b就是其A点到C点的最短路径) 就是这种思想,假如我们求得一个点(我们假设x)到所有相邻点的所有路径,从其中选择一条最短的边(我们假设这条边的另一个点是y),那么该条最短的边就是x到y的最短路径。(如果你问会不会存在从其他边绕到y,且其路径距离小与前边最短的边,我只能说不会。就像一开始所说求出x点到其相邻点中路径中最短的了,你在从其他点绕肯定要经过x点的相邻点,到时候的总距离一定会大于x点到其相邻点中路径最短的距离。)
由前边的内容我们可以求得一个点的最短路径,假设我们已经求得了C点,那么我们可以将A点和C点也就是已求出最短路径的所有点(A点由于是本身,所以其最短路径已知为0)看成一个整体,然后去以已找出最短路径的点,用他们到他们的相邻点的中的最短的距离,用上面同样的思想去求出到其他未求出最短路径的点的最短路径就行了。直到求出到所有点的最短路径为止。
记着中间每当找到一个最短路径的点之后,记着要更新A点到其他各点的距离。