Dijkstra算法

来源:互联网 发布:js产生1到3随机数 编辑:程序博客网 时间:2024/06/05 08:30

突然用到Dijkstra算法,网上找了找资料,简单阐述一下:

设有一个图(有向/无向都可以),这里我们假设图为无向图,如下图,设A为源节点,Dijkstra算法主要目的是找到A到其余所有节点的最短路径,怎么找呢?


下面介绍具体做法:

设置两个集合,一个是找过点的集合(集合S),另一个是没有找的点的集合(H),A为源节点。

1,将A加入集合S(A->A=0),此时集合H{B,C,D,E,F},我们可以找出(A->B=6)(A->C=3),这里(A->C=3)为最短;

2,将C加入集合S{A,C},集合H{B,D,E,F},沿着A->C这条最短路径找,(A->C->B=5小于A->B=6,B的权值赋值为5,A->C->B为A到B的最短路径)(A->C->D=6)(A->C->E=7);

3,将B加入集合S{A,C,B},集合H{D,E,F},沿着A->C->B路径找,(A->C->B->D=10大于A->C->D=6,A->C->D为A到D的最短路径);

4,将D加入集合S{A,C,B,D},集合H{E,F},沿着A->C->D路径找,(A->C->D->E=8大于A->C->E=7,因此A到E的最短路径为A->C->E)(A->C->D->F=9);

5,将E加入集合S{A,C,B,D,E},集合H{F},沿着A->C->E路径找,(A->C->E->F=12大于A->C->D->F=9,因此A到F的最短路径为A->C->D->F)

至此,源节点A到所有节点的最短路径已经找完,分别为A,  A->C,   A->C->B,  A->C->D,  A->C->E,  A->C->D->F。


代码这里不再加,网上好多

2 0
原创粉丝点击