首先,我们需要初始化路由表,将源节点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
3 观察下图的子网。使用最短路径路由算法Dijkstra构建路由表。请给出从源节点A开始到其它所有节点的最短路径和最小代价。要求有详细的过程图示‎‎

原文地址: http://www.cveoy.top/t/topic/fk2o 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录