- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划所有点的对最短距离
第七章动态规划;7.5所有点对的最短路径问题;复习Dijkstra算法;算法中,我们不断更新以下三个数组:
s数组: s[i],当顶点i加入S时,s[i]置1
Distance数组: Distance[i]记录原点到 顶点i的最短特殊路径长度。
path数组: path[i]记录顶点i在其最短特殊路径上的前驱顶点。由该数组可求得原点到各点的最短路径。如:设源点是顶点1, path数组如下
; 例如,对右图中的有向图,应用Dijkstra算法计算从源顶点1到其它顶点间最短路径的过程列在下页的表中。;方法一:重复调用Dijkstra算法n次;voidShortPath(AdjMWGraph G, int **distance, int **path)
{
Int n=G.NumOfVertices();
for(inti=0;in;i++)
Dijkstra(G,i,distance[i],path[i]);
};该问题具有最优子结构性质;子问题的构造;子问题Dk:从顶点i(可以经过顶点1、顶点2、……顶点k,不得经过任何其他顶点)到顶点j的距离。
子问题Dn:从顶点i(可以经过顶点1、顶点2、……顶点n )到顶点j的距离。
——即原问题
;递推关系的建立;例:考虑下图所示的带权有向图,求所有顶点之间的最短距离。;1;算法设计;FLOYD算法;练习;选做题;4 单源最短路径;8.3 单源最短路径;Dijkstra算法的选择策略;8.3 单源最短路径; 初始状态下,S中只有一个点(源点v1)。; 第二步,将S外距离S最近的点v2加入S。更新相应信息。; 第三步,将S外距离S最近的点v4加入S。更新相应信息。
; 第四步,将S外距离S最近的点v3加入S。更新相应信息。
; 第五步,将S外距离S最近的点v5加入S。更新相应信息。
;void Dijkstra ( int G[][N],int v0,int dist[],
int path[],int n)
//源点v0到其他顶点的最短距离dist和最短路径下标path
{ int *s=new int[n];
int minDis, i, j, u;
? //初始化三个数组
;//逐次将各点加入S
//在当前还未找到最短路径的顶点集中 选取具有最短距离的顶点u
//标记顶点u已从集合T加入到集合S中
//修改从v0到其他顶点的最短距离和最短路径
;void Dijkstra ( int G[][N],int v0,int dist[],
int path[],int n)
//从源点v0到其他顶点的最短距离dist和最短路径下标path
{int *s=new int[n];
int minDis , i, j, u;
? //初始化三个数组
for(i=0;in;i++)
{;dist[i]=G[v0][i];
s[i]=0;
if(I != v0 dist[i]MAX) path[i]=v0;
else path[i]=-1;
}
s[v0]=1;//标记顶点v0已从集合T加入到集合S中
//在当前还未找到最短路径的顶点集中选取具有最短距离的顶点u
for(i=1;in;i++)
{minDis=MAX;
for(j=0;j=n;j++);u到j有边相连,j才有可能因u的加入而距离源点更近;dist[j]=dist[u]+G[u][j];
path[j]=u;
}}} ;拦截导弹
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹.
样例:
INPUT OUTPUT
389 207 155 300 299 170 158 65 6(最多能拦截的导弹数)
您可能关注的文档
最近下载
- XF 44-2015 消防头盔 XF 44-2015 消防头盔.pdf
- 2024-2025(最新版)人教版语文一年级上册第一单元教案(2024秋部编新教材).pdf VIP
- T∕CNFIA 135-2022 即食拌饭干制品.docx VIP
- 报关员的年终工作总结.pptx
- 小麦膜下滴灌丰产栽培技术规程(征求意见稿)编制说明.doc VIP
- T/CGCC 26-2018_食品用酒精保鲜剂.pdf VIP
- 工厂岗位职责说明书(岗位说明书).doc VIP
- 实验室危化品管理.pptx VIP
- 产品标识和可追溯性控制程序.docx VIP
- GB 50058-2014 爆炸危险环境电力装置设计规范(附条文说明).pdf VIP
文档评论(0)