用迪杰斯特拉算法求下图中从顶点a到其它顶点间的最短路径,要求写出执行算法过程中各步的状态,最短路径及路径长度。 a -> b (7) a -> c (2) a -> d (9) b -> c (3) b -> e (6) c -> e (8) c -> f (4) d -> c (4) e -> g (9) f -> e (5) f -> g (8) f -> d (5) g -> b (4) d -> g (3)
时间: 2023-04-12 16:01:46 浏览: 88
好的,让我来帮你解决这个问题。根据迪杰斯特拉算法,我们需要先初始化各个顶点的距离值,然后逐步更新距离值,直到找到从起点到目标顶点的最短路径。下面是执行算法过程中各步的状态及最短路径及路径长度:
1. 初始化:a(0), b(∞), c(∞), d(∞), e(∞), f(∞), g(∞)
2. 选取距离起点最近的顶点c,更新其相邻顶点的距离值:a(0), b(7), c(2), d(9), e(8), f(4), g(∞)
3. 选取距离起点最近的顶点b,更新其相邻顶点的距离值:a(0), b(7), c(2), d(9), e(8), f(4), g(11)
4. 选取距离起点最近的顶点f,更新其相邻顶点的距离值:a(0), b(7), c(2), d(9), e(8), f(4), g(11)
5. 选取距离起点最近的顶点a,更新其相邻顶点的距离值:a(0), b(7), c(2), d(9), e(8), f(4), g(11)
6. 选取距离起点最近的顶点d,更新其相邻顶点的距离值:a(0), b(7), c(2), d(9), e(8), f(4), g(11)
7. 选取距离起点最近的顶点e,更新其相邻顶点的距离值:a(0), b(7), c(2), d(9), e(8), f(4), g(11)
8. 选取距离起点最近的顶点g,更新其相邻顶点的距离值:a(0), b(7), c(2), d(9), e(8), f(4), g(11)
9. 最短路径为:a -> c -> f -> d -> g,路径长度为11。
希望这个答案能够帮助你!
相关问题
用迪杰斯特拉算法求下图中从顶点a到其它顶点间的最短路径,要求写出执行算法过程中各步的状态,最短路径及路径长度。 a -> b (7) a -> c (2) a -> d (9) b -> c (3) b -> e (6) c -> e (8) c -> f (4) d -> c (4) d -> g (3) e -> g (9) f -> e (5) f -> g (8) f -> d (5) g -> b (4)
好的,让我来回答你的问题。根据迪杰斯特拉算法,我们需要先将起点 a 到其它顶点的距离初始化为无穷大,然后将起点 a 到自身的距离设为 0。接下来,我们需要遍历所有顶点,每次找到距离起点 a 最近的顶点,并更新其它顶点到起点 a 的距离。具体步骤如下:
1. 初始化距离数组 dist[],将 a 到其它顶点的距离设为无穷大,a 到自身的距离设为 0。
dist[a] = 0, dist[b] = ∞, dist[c] = ∞, dist[d] = ∞, dist[e] = ∞, dist[f] = ∞, dist[g] = ∞
2. 初始化 visited[],表示该顶点是否已被访问过,初始值均为 false。
visited[a] = false, visited[b] = false, visited[c] = false, visited[d] = false, visited[e] = false, visited[f] = false, visited[g] = false
3. 从未访问过的顶点中找到距离起点 a 最近的顶点,即 c,将 visited[c] 设为 true。
visited[c] = true
4. 更新其它顶点到起点 a 的距离,如果经过 c 的距离更短,则更新距离数组 dist[]。
dist[b] = 7, dist[c] = 2, dist[d] = 9, dist[e] = 10, dist[f] = 6, dist[g] = ∞
5. 重复步骤 3 和 4,找到距离起点 a 最近的未访问过的顶点 f,将 visited[f] 设为 true。
visited[f] = true
6. 更新其它顶点到起点 a 的距离,如果经过 f 的距离更短,则更新距离数组 dist[]。
dist[b] = 7, dist[c] = 2, dist[d] = 9, dist[e] = 10, dist[f] = 6, dist[g] = 11
7. 重复步骤 3 和 4,找到距离起点 a 最近的未访问过的顶点 b,将 visited[b] 设为 true。
visited[b] = true
8. 更新其它顶点到起点 a 的距离,如果经过 b 的距离更短,则更新距离数组 dist[]。
dist[b] = 7, dist[c] = 2, dist[d] = 9, dist[e] = 10, dist[f] = 6, dist[g] = 11
9. 重复步骤 3 和 4,找到距离起点 a 最近的未访问过的顶点 d,将 visited[d] 设为 true。
visited[d] = true
10. 更新其它顶点到起点 a 的距离,如果经过 d 的距离更短,则更新距离数组 dist[]。
dist[b] = 7, dist[c] = 2, dist[d] = 9, dist[e] = 10, dist[f] = 6, dist[g] = 11
11. 重复步骤 3 和 4,找到距离起点 a 最近的未访问过的顶点 e,将 visited[e] 设为 true。
visited[e] = true
12. 更新其它顶点到起点 a 的距离,如果经过 e 的距离更短,则更新距离数组 dist[]。
dist[b] = 7, dist[c] = 2, dist[d] = 9, dist[e] = 10, dist[f] = 6, dist[g] = 11
13. 重复步骤 3 和 4,找到距离起点 a 最近的未访问过的顶点 g,将 visited[g] 设为 true。
visited[g] = true
14. 更新其它顶点到起点 a 的距离,如果经过 g 的距离更短,则更新距离数组 dist[]。
dist[b] = 7, dist[c] = 2, dist[d] = 9, dist[e] = 10, dist[f] = 6, dist[g] = 11
15. 遍历结束,得到起点 a 到其它顶点的最短路径长度为:
a -> b: 7
a -> c: 2
a -> d: 9
a -> e: 10
a -> f: 6
a -> g: 11
最短路径分别为:
a -> c -> f -> e -> g -> b
a -> c
a -> d -> c -> f -> e -> g -> b
a -> c -> e
a -> f
a -> c -> f -> g -> b
使用迪杰斯特拉(dijkstra)算法求下图中从顶点1到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是
1到2的最短路径为1-2,目标顶点为2;
1到3的最短路径为1-3,目标顶点为3;
1到4的最短路径为1-2-4,目标顶点为4;
1到5的最短路径为1-2-5,目标顶点为5;
1到6的最短路径为1-3-6,目标顶点为6。
阅读全文