算法-图(1)Dijkstra求最短路径
数组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求最短路径的更多相关文章
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16425 Accepted: 5797 Descr ...
- 图——图的Dijkstra法最短路径实现
1,最短路径的概念: 1,从有向图中某一顶点(起始顶点)到达另一顶点(终止顶点)的路径中,其权值之和最小的路径: 2,问题的提法: 1,给定一个带权有向图 G 与起始顶点 v,求从 v 到 G 中其它 ...
- Dijkstra求最短路径
单源点的最短路径问题:给定带权有向图G和源点V,求从V到G中其余各顶点的最短路径 Dijkstra算法描述如下: (1)用带权的邻接矩阵arcs表示有向图,arcs[i][j]表示弧<vi,vj ...
- Dijkstra求最短路径&例题
讲了半天好像也许maybe听懂了一点,先写下来233 先整理整理怎么存(开始绕) 最简单的是邻接矩阵存,但是开到10000*10000就MLE了,所以我们用链式前向星存(据说是叫这个名字吧) 这是个什 ...
- 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 ...
- 【算法系列学习】Dijkstra求最短路 [kuangbin带你飞]专题四 最短路练习 D - Silver Cow Party
https://vjudge.net/contest/66569#problem/D trick:1~N各点到X可以通过转置变为X到1~N各点 #include<iostream> #in ...
- 图之Dijkstra算法
Dijkstra算法是一种求单源最短路的算法,即从一个点开始到所有其他点的最短路.其步骤如下: c语言实现如下:(使用邻接矩阵存储) #include <stdio.h> #include ...
- 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径
自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...
- Dijkstra算法求最短路径(java)(转)
原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...
随机推荐
- Qt子类化后qss设置背景色无效的问题
1.问题背景 在某个类中,用到了一个组合的widget,有按钮进度条等,类似于视频播放器按钮控制区和精度条(参考了很多feiyangqingyun的文章,感谢),调试正常后整理代码,为了提高代码可读性 ...
- PHP jewishtojd() 函数
------------恢复内容开始------------ 实例 把犹太历法的日期转换为儒略日计数: <?php$jd=jewishtojd(6,20,2007);echo $jd;?> ...
- PHP imagecolorat - 取得某像素的颜色索引值
imagecolorat — 取得某像素的颜色索引值.高佣联盟 www.cgewang.com 语法 int imagecolorat ( resource $image , int $x , int ...
- PHP children() 函数
实例 查找 note 节点的子节点: <?php$note=<<<XML<note><to>Tove</to>高佣联盟 www.cgewan ...
- CF453A Little Pony and Expected Maximum 期望dp
LINK:Little Pony and Expected Maximum 容易设出状态f[i][j]表示前i次最大值为j的概率. 转移很显然 不过复杂度很高. 考虑优化.考虑直接求出最大值为j的概率 ...
- windows:跨进程读数据
外挂.木马.病毒等可能需要读取其他进程的数据,windows提供了OpenProcess.ReadProcessMemory等函数.但越是大型的软件,防护做的越好,大概率会做驱动保护,比如hook S ...
- 使用ST-Link下载程序出现Error:Flash Download Failed-“Cortex-M3“ 解决详细步骤(附图)
我一直用stm32 f407开发. 最近要学mqtt与阿里云联网之类的课程,因为没有做过,所以网上搜了一遍,结果全是stm32 f103c8t6的例程. 后来我就搬出我的f103最小系统版 (这个就为 ...
- 【BZOJ1471】不相交路径 题解(拓扑排序+动态规划+容斥原理)
题目描述 在有向无环图上给你两个起点和终点分别为$a,b,c,d$.问有几种路径方案使得能从$a$走到$b$的同时能从$c$走到$d$,且两个路径没有交点. $1\leq n\leq 200,1\le ...
- Pytorch_第六篇_深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数
深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [1]---监督学习和无监督学习 ...
- syslog协议及rsyslog服务全解析
背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议. 一.什么是syslog协议 1.介绍(略) 2.syslog标准协议 ...