迪杰斯特拉算法(dijkstra算法详细步骤)

迪杰斯特拉算法(dijkstra算法详细步骤)

  步骤

  集合S

  集合Q

  1

  选择A到集合S={A}

  此时最短路径A->A=0

  以A为中间点,查找相邻点

  Q={B,C,D,E,F,G}

  A->-B=5

  A->C=2

  A->其它Q中结点=∞

  发现A->C=2权值为最短

  2

  选择C到S={A,C}

  此时最短路径A->A=0,A->C=2

  以C为中间点,从A->C这条路径开始找

  Q={B,D,E,F,G}

  A->B=5(由第1步得到)

  A->C->D=3

  A->C->F=10

  A->C->其它Q中结点=∞

  在A到Q的结点中,发现A->C->D=3权值为最短

  3

  选择D到S={A,C,D}

  此时最短路径A->A=0,A->C=2,A->C->D=3,

  以D为中间点,从A->C->D这条路径开始找

  Q={B,E,F,G}

  A->C->D->B=4(比第1步的A->B=5要短,替换之)

  A->C->D->E=4

  A->C->D->F=5(比第2步的A->C->F=10要短,替换之)

  A->C->D->G=∞

  在A到Q的结点中,发现A->C->D->B=4或A->C->D->E=4权值为最短

  4

  选择B、E到S={A,C,D,B,E}

  此时最短路径A->A=0,A->C=2,A->C->D=3,A->C->D->B=4,A->C->D->E=4,

  以B、E为中间点,分别从A->C->D->B、从A->C->D->E路径开始找

  Q={F,G}

  A->C->D->E->G=11

  A->C->D->F=5(从第3步获得)

  在A到Q的结点中,发现A->C->D->F权值为最短

  5

  选择F到S={A,C,D,B,E,F}

  此时最短路径A->A=0,A->C=2,A->C->D=3,A->C->D->B=4,A->C->D->E=4,A->C->D->F=5

  以F为中间点,从,A->C->D->F这条路径开始找

  Q={G}

  A->C->D->F->G=8(比第4步的A->C->D->E->G=11要短,替换之)

  6

  选择G到S={A,C,D,B,E,F,G}

  此时最短路径A->A=0,A->C=2,A->C->D=3,A->C->D->B=4,A->C->D->E=4,A->C->D->F=5,A->C->D->F->G=8

  集合Q为空,查找完毕。

推荐阅读