数组dist[],是当前求到的顶点v到顶点j的最短路径长度

数组path[]存放求到的最短路径,如path[4]=2,path[2]=3,path[3]=0,则路径{0,3,2,4}就是0到4的最短路径

数组S[]存放已经求到了最短路径的结点的集合

算法包括两个并行的for循环:

(1)辅助数组的初始化工作,dist[i]=G.getweight(v,i),时间复杂度为O(n)。

(2)顶点v是第一个求到了最短路径的结点,dist[v]=0,把它加入数组S[]。

(2)进行最短路径求解工作的二重嵌套循环,时间复杂度为O(n^2)。大循环重复n-1次,每次求出一个结点的最短路径长度dist[u]和最短路径path[u]:

    进行n次循环,每次从没有加入S[]的顶点中找出最短路径长度dist[i]最小的点,加入集合。

    进行n次循环,每次修改和该点相邻接的结点的最短路径长度dist[j]和最短路径path[j](先判断边是否存在)。

最后总的时间复杂度为O(n^2)。

template <class T,class E>
void ShortestPath(Graph<T,E>& G,T v,E dist[],int path[]){ //求到顶点v的最短路径存储在path[]中,最短距离存储在dist[]中
//G为带权有向图
int n=G.NumberOfVertices();
bool *S=new bool[n]; //数组S存放已经求到了最短路径的结点的集合
int i,j,k;
E w,min;
for (i=; i<n; i++) {
dist[i]=G.getWeight(v,i);
S[i]=false;
if(i!=v && dist[i]<maxValue) path[i]=v;
else path[i]=-;
}
S[v]=true;dist[v]=; //顶点v加入顶点集合
for (i=; i<n-; i++) {
min=maxValue; //每次循环前重置min和u
int u=v;
for (j=; j<n; j++)
if(S[j]==false && dist[j]<min){ //选不在S中具有最短路径的顶点u
u=j;
min=dist[j];
}
S[u]=true;
for(k=; k<n; k++){
w=G.getWeight(u,k);
if(S[k]==false && w<maxValue && dist[u]+w<dist[k]){
dist[k]=dist[u]+w;
path[k]=u;
}
}
}
} // 从path数组读取最短路径的算法
template <class T,class E>
void printShortestPath(Graph<T,E>& G,int v,E dist[],int path[]){
cout<<"从顶点"<<G.getValue(v)<<"到其它顶点的最短路径为:"<<endl;
int i,j,k,n=G.NumberOfVerticles();
int *d=new int[n];
for (i=o; i<n; i++)
if(i!=v){
j=i;k=;
while(j!=v){d[k++]=j;j=path[];}
cout<<"顶点"<<G.getValue(i)<<"的最短路径为"<<G.getValue(v);
while(k>){
cout<<G.getValue(d[--k])<<"";
cont<<"最短路径长度为:"<<dist[i]<<endl;
}
}
delete []d;
}

算法-图(1)Dijkstra求最短路径的更多相关文章

  1. POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16425   Accepted: 5797 Descr ...

  2. 图——图的Dijkstra法最短路径实现

    1,最短路径的概念: 1,从有向图中某一顶点(起始顶点)到达另一顶点(终止顶点)的路径中,其权值之和最小的路径: 2,问题的提法: 1,给定一个带权有向图 G 与起始顶点 v,求从 v 到 G 中其它 ...

  3. Dijkstra求最短路径

    单源点的最短路径问题:给定带权有向图G和源点V,求从V到G中其余各顶点的最短路径 Dijkstra算法描述如下: (1)用带权的邻接矩阵arcs表示有向图,arcs[i][j]表示弧<vi,vj ...

  4. Dijkstra求最短路径&例题

    讲了半天好像也许maybe听懂了一点,先写下来233 先整理整理怎么存(开始绕) 最简单的是邻接矩阵存,但是开到10000*10000就MLE了,所以我们用链式前向星存(据说是叫这个名字吧) 这是个什 ...

  5. POJ 2387 Til the Cows Come Home Dijkstra求最短路径

    Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...

  6. 【算法系列学习】Dijkstra求最短路 [kuangbin带你飞]专题四 最短路练习 D - Silver Cow Party

    https://vjudge.net/contest/66569#problem/D trick:1~N各点到X可以通过转置变为X到1~N各点 #include<iostream> #in ...

  7. 图之Dijkstra算法

    Dijkstra算法是一种求单源最短路的算法,即从一个点开始到所有其他点的最短路.其步骤如下: c语言实现如下:(使用邻接矩阵存储) #include <stdio.h> #include ...

  8. 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径

    自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...

  9. Dijkstra算法求最短路径(java)(转)

    原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...

随机推荐

  1. Python JSON的基本使用

    Python JSON的基本使用 一.json格式介绍 JSON(JavaScript Object Notation) 通用的数据类型,易于人阅读和编写. 跟字典有些类似,形式也是key-value ...

  2. Mybatis开启二级缓存(全局缓存)的方法

    Mybatis开启二级缓存的方法 开启步骤 1.在 mybatis-config.xml 的配置文件中进行显示配置,开启二级缓存(全局缓存) 2.在 Mapper.xml 文件中添加cache标签 一 ...

  3. 【高并发】亿级流量场景下如何为HTTP接口限流?看完我懂了!!

    写在前面 在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一.京东618.秒杀.抢购促销等,这些都是典型的大流量高并发场景.关于秒杀,小伙伴们可以参见我的另一篇 ...

  4. PHP preg_filter() 函数

    preg_filter 函数用于执行一个正则表达式搜索和替换.高佣联盟 www.cgewang.com 语法 mixed preg_filter ( mixed $pattern , mixed $r ...

  5. 2020牛客暑假多校训练营 第二场 G Greater and Greater bitset

    LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. ...

  6. Improving RGB-D SLAM in dynamic environments: A motion removal approach

    一.贡献 (1)提出一种针对RGB-D的新的运动分割算法 (2)运动分割采用矢量量化深度图像 (3)数据集测试,并建立RGB-D SLAM系统 二.Related work [1]R.K. Namde ...

  7. Android 给服务器发送网络请求

    今天听得有点蒙,因为服务器的问题,这边建立服务器的话,学长用的是Idea建立的Spring之类的方法去搞服务器. 然后就是用Android去给这个服务器发送请求,大致效果还是懂的,就是像网站发送请求, ...

  8. 开源丨CloudBase CMS 内容管理系统!简单易用企业内容管理流

    背景 云开发CloudBase CMS 是云开发推出的一站式云端内容管理系统,助力企业的数据运营管理工作. 开发者可以直接在云开发扩展能力中一键安装 CloudBase CMS,免费使用 CloudB ...

  9. 微信小程序后台springboot+mybatis+mysql“采坑”集锦

    "采坑"错误集锦 1.service层 错误描述:2019-04-14 22:09:52.027 ERROR 8416 --- [nio-8082-exec-5] o.a.c.c. ...

  10. Nexus2 上传文件

    通过管理界面上传 上传文件 hello-nexus.jar 登录 nexus2 选择第三方库 填写文件信息,完成文件上传 在索引页刷新,可以看到上传的文件 服务器上,文件的存放路径是 sonatype ...