永发信息网

单源最短路径的Dijkstra算法

答案:1  悬赏:80  手机版
解决时间 2021-11-21 18:29
单源最短路径的Dijkstra算法
最佳答案
将图G中所有的顶点V分成两个顶点集合S和T。以v为源点已经确定了最短路径的终点并入S集合中,S初始时只含顶点v,T则是尚未确定到源点v最短路径的顶点集合。然后每次从T集合中选择S集合点中到T路径最短的那个点,并加入到集合S中,并把这个点从集合T删除。直到T集合为空为止。
具体步骤
1、选一顶点v为源点,并视从源点v出发的所有边为到各顶点的最短路径(确定数据结构:因为求的是最短路径,所以①就要用一个记录从源点v到其它各顶点的路径长度数组dist[],开始时,dist是源点v到顶点i的直接边长度,即dist中记录的是邻接阵的第v行。②设一个用来记录从源点到其它顶点的路径数组path[],path中存放路径上第i个顶点的前驱顶点)。
2、在上述的最短路径dist[]中选一条最短的,并将其终点(即)k加入到集合s中。
3、调整T中各顶点到源点v的最短路径。 因为当顶点k加入到集合s中后,源点v到T中剩余的其它顶点j就又增加了经过顶点k到达j的路径,这条路径可能要比源点v到j原来的最短的还要短。调整方法是比较dist[k]+g[k,j]与dist[j],取其中的较小者。
4、再选出一个到源点v路径长度最小的顶点k,从T中删去后加入S中,再回去到第三步,如此重复,直到集合S中的包含图G的所有顶点。 SPFA实际上是Bellman-Ford基础上的队列优化
SPFA(G,w,s)
1. INITIALIZE-SINGLE-SOURCE(G,s)
2. INITIALIZE-QUEUE(Q)
3. ENQUEUE(Q,s)
4. While Not EMPTY(Q)
5. Do u<-DLQUEUE(Q)
6. For 每条边(u,v) in E[G]
7. Do tmp<-d[v]
8. Relax(u,v,w)
9. If (d[v] < tmp) and (v不在Q中)
10. ENQUEUE(Q,v)
c++:
boolSPFA(intsource)
{
dequedq;
inti,j,x,to;
for(i=1;i<=nodesum;i++)
{
in_sum[i]=0;
in_queue[i]=false;
dist[i]=INF;
path[i]=-1;
}
dq.push_back(source);
in_sum[source]++;
dist[source]=0;
in_queue[source]=true;
//初始化完成
while(!dq.empty())
{
x=dq.front();
dq.pop_front();
in_queue[x]=false;
for(i=0;i{
to=adjmap[x][i].to;
if((dist[x]dist[x]+adjmap[x][i].weight))
{
dist[to]=dist[x]+adjmap[x][i].weight;
path[to]=x;
if(!in_queue[to])
{
in_queue[to]=true;
in_sum[to]++;
if(in_sum[to]==nodesum)
return false;
if(!dq.empty())
{
if(dist[to]>dist[dq.front()])
dq.push_back(to);
else
dq.push_front(to);
}
else
dq.push_back(to);
}
}
}
}
returntrue;
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有没有最近十分火的歌或者是十分好听的歌
只有一只画眉羡慕着天空,却从来没有人懂?猜
求几个一G以上二G以下大约一点五G就行的第一
凭本事单的身,为什么要谈恋爱
中国联通(曲沃史村合作营业厅)地址在什么地方
哪个男人睡的女人最多
北京顺瑞酶制剂有限公司怎么样?
国航托运行李30寸是如何计算的
求CDR x8教程百度云
法老的宠妃里艾薇最后和谁在一起了?
游乐设备,游乐气炮,游乐项目好吗
天龙八部我的号二级秘密是用手机号绑定的,现
江南丝竹也与道教有关吗?
河南省濮阳县白罡乡到王城固乡有多远
中国联通(宇晋营业厅)地址在哪,我要去那里办
推荐资讯
读后感作文怎么写
泊头有什么公园景点或者什么好玩的地方吗
自行车内胎的美嘴与法嘴有什么区别?
所有智能电视都可以不要盒子就有盒子的功能吗
行贿3万元被查出会判刑吗?
刘长瑜有几个儿女
牛排怎么煎,简单煎就好
白云网吧地址好找么,我有些事要过去,
0.45厚65锰弹簧片为什么镀锌后易折断?
有人能借个QQ小号吗
求大师帮忙鉴定一下这两个LV包包的真假,一个
派克干洗地址在哪,我要去那里办事,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?