- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构2_第8章2_1 算法和 与数据结构 课件 ppt.ppt
第八章 图;最短路径 (Shortest Path);单源最短路径问题;迪杰斯特拉(Dijkstra)算法思想;迪杰斯特拉算法的求解过程;void dijkstra (Graph G,int v0,int dist[] , int path[] )
{ int n=G.ver.size;
int *s=(int *)malloc(sizeof(int)*n);
int mindis,i,j,u;
for (i=0;in;i++)
{ dist[i]=G.edge[v0][i];
s[i]=0;
if(i!=v0dist[i]maxw) path[i]=v0;
else path[i]=-1;
}
s[v0]=1;
for(i=1;in;i++)
{ mindis=maxw;
for (j=0;j=n;j++)
if (s[j]= =0dist[j]mindis)
{ u=j;; mindis=dist[j];
}
if (mindis==maxw) return;
s[u]=1;
for (j=0;jn;j++)
if (s[j]==0G.edge[u][i]maxw
dist[u]+G.edge[u][j]dist[j])
{ dist[j]= dist[u]+G.edge[u][j]
path[j]=u;
}
}
};算法说明
对于顶点i和j:
1、首先,考虑从i到j是否有以顶点1为中间点的路径,:i,1,j,即考虑图中是否有边i,1和1,j,若有,则新路径i,1,j的长度是C[i][1]+C[1][j],比较路径i,j和i,1,j,的长度,并以较短者为当前所求得的最短路径,。该路径是中间点序号不大于1的最短路径。;2、其次,考虑从i到j是否包含顶点2为中间点的路径:i,...,2,...,j,若没有,则从i到j的最短路径仍然是第一步中求出的,即从i到j的中间点序号不大于1的最短路径;若有,则i,...,2,...,j可分解成两条路径i,...,2和2,...,j,而这两条路径是前一次找到的中间点序号不大于1的最短路径,将这两条路径相加就得到路径i,...,2,...,j的长度,将该长度与前一次求出的从i到j的中间点序号不大于1的最短路径长度比较,取其较短者作为当前求得的从i到j的中间点序号不大于2的最短路径。
;3、然后,再选择顶点3加入当前求得的从i到j中间点序号不大于2的最短路径中,按上述步骤进行比较,从未加入顶点3作中间点的最短路径和加入顶点3作中间点的新路径中选取较小者,作为当前求得的从i到j的中间点序号不大于3的最短路径。依次类推,直到考虑了顶点n加入当前从i到j的最短路径后,选出从i到j的中间点序号不大于n的最短路径为止。由于图中顶点序号不大于n,所以从i到j的中间点序号不大于n的最短路径,已考虑了所有顶点作为中间点的可能性。因而它必是从i到j的最短路径。;算法的基本思想就是:
从初始的邻接矩阵A0开始,递推地生成矩阵序列A1,A2,...,An;Floyd算法
int path[n][n];
FLOYD(float A[][n],float C[][n])
{ int i,j,k,next;
int max=160;
for (i=0,in,i++)
for (j=0;jn;j++)
{ if (C[i][j]!=max) path[i][j]=j;
else path[i][j]=0; A[i][j]=C[i][j];
}
for (k=0;kn;k++)
for (i=0;in;i++)
for (j=0;jn;j++)
if (a[i][j](A[i][k]+A[k][j]))
{ A[i][j]=A[i][k]+A[k][j];
path[i][j]=path[i][k];
};1;;拓扑排序; C1 高等数学
C2 程序设计基础
C3 离散数学 C1, C2
您可能关注的文档
最近下载
- 2023年江苏省健康照护行业职业技能竞赛备考题库大全-下(判断题汇总).doc VIP
- 新22J01《工程做法》(新疆图集).pdf VIP
- 体检报告电子版.docx VIP
- 2024年8月17日国家综合性消防救援队伍消防员招录面试真题及答案解析(上午卷).doc VIP
- GA 1467-2018 城市轨道交通安全防范要求.docx VIP
- 羽毛球课程教学大纲.docx VIP
- 接正式电方案.pdf
- 2024年甘肃定西岷县城区部分学校竞聘教师实施(238人)笔试备考试题及答案解析.docx VIP
- DB11∕T 646.1-2016 城市轨道交通安全防范系统技术要求 第1部分:通则.docx VIP
- NIST SP 800-218 SSDF安全软件开发框架.xlsx
文档评论(0)