Dijkstra算法

突然用到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。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值