3 观察下图的子网。使用最短路径路由算法Dijkstra构建路由表。请给出从源节点A开始到其它所有节点的最短路径和最小代价。要求有详细的过程图示
首先,我们需要初始化路由表,将源节点A到所有节点的距离都设置为无穷大(表示目前还未找到最短路径),同时标记源节点A为已访问。
| 目标节点 | 距离 | 前继节点 | 是否已访问 | | ---- | ---- | ---- | ---- | | A | 0 | - | 是 | | B | ∞ | - | 否 | | C | ∞ | - | 否 | | D | ∞ | - | 否 | | E | ∞ | - | 否 | | F | ∞ | - | 否 |
接下来,我们需要从已访问的节点中选取一个离源节点A最近的节点,作为中间节点,以更新其它节点的距离。在本例中,源节点A本身就是离源节点A最近的节点,因此我们从A开始。
我们先考虑A节点能够直接到达的节点B和C。根据图中的距离,A到B的距离为10,A到C的距离为15。因此我们可以更新路由表:
| 目标节点 | 距离 | 前继节点 | 是否已访问 | | ---- | ---- | ---- | ---- | | A | 0 | - | 是 | | B | 10 | A | 否 | | C | 15 | A | 否 | | D | ∞ | - | 否 | | E | ∞ | - | 否 | | F | ∞ | - | 否 |
接下来,我们选取距离源节点A最近的节点B作为中间节点,更新其它节点的距离。B能够直接到达节点D和E,因此我们可以更新路由表:
| 目标节点 | 距离 | 前继节点 | 是否已访问 | | ---- | ---- | ---- | ---- | | A | 0 | - | 是 | | B | 10 | A | 是 | | C | 15 | A | 否 | | D | 20 | B | 否 | | E | 30 | B | 否 | | F | ∞ | - | 否 |
接下来,我们选取距离源节点A最近的节点C作为中间节点,更新其它节点的距离。C能够直接到达节点E和F,因此我们可以更新路由表:
| 目标节点 | 距离 | 前继节点 | 是否已访问 | | ---- | ---- | ---- | ---- | | A | 0 | - | 是 | | B | 10 | A | 是 | | C | 15 | A | 是 | | D | 20 | B | 否 | | E | 25 | C | 否 | | F | 45 | C | 否 |
接下来,我们选取距离源节点A最近的节点D作为中间节点,更新其它节点的距离。D能够直接到达节点F,因此我们可以更新路由表:
| 目标节点 | 距离 | 前继节点 | 是否已访问 | | ---- | ---- | ---- | ---- | | A | 0 | - | 是 | | B | 10 | A | 是 | | C | 15 | A | 是 | | D | 20 | B | 是 | | E | 25 | C | 否 | | F | 35 | D | 否 |
最后,我们选取距离源节点A最近的节点E作为中间节点,更新其它节点的距离。E不能到达其它节点,因此我们不做任何更新。
最终的路由表如下:
| 目标节点 | 距离 | 前继节点 | 是否已访问 | | ---- | ---- | ---- | ---- | | A | 0 | - | 是 | | B | 10 | A | 是 | | C | 15 | A | 是 | | D | 20 | B | 是 | | E | 25 | C | 是 | | F | 35 | D | 是 |
根据路由表,我们可以得到从源节点A到其它所有节点的最短路径和最小代价:
- A到B的最短路径是A->B,距离为10;
- A到C的最短路径是A->C,距离为15;
- A到D的最短路径是A->B->D,距离为20;
- A到E的最短路径是A->C->E,距离为25;
- A到F的最短路径是A->B->D->F,距离为35
原文地址: http://www.cveoy.top/t/topic/fk2o 著作权归作者所有。请勿转载和采集!