- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法实验报告swx
二、单源点最短路径
1、问题描述
单源最短路径问题是已知一个n结点有向图G V,E 和边的权函数c e ,求由G中某指定结点v0到其它各结点的最短路径。假定边的权值为正。
2、算法描述
为了制定产生最短路径贪心算法,对于这个问题需要想出一个多级解决方案和最优的量度标准。方法之一是逐条构造这些最短路径,可以用迄今已经生成的所有路径长度之和作为一种量度,为了使这一量度达到最小,其单独的每一个路径都必须具有最小长度。
使用这一个量度标准时,假定已经构造了i条最短路径,则下面要构造的路径应该是下一个最小的长度路径。生成从源点到所有其他结点的最短路径的贪心方法就是按照路径长度的非降次序生成这些路径。
首先,生成一条到最短结点的最短路径,然后生成一条到第二近结点的最短路径,依次往下进行…。为了按照这样的路径生成这些最短路径,需要确定与其生成最短路径的下一个结点,以及到这一结点的最短路径。实验中用S表示对其已经生成了最短路径的那些结点(包括)的集合,对于来写不在S中的w,设Dist(w)是从开始只经过S中结点而在w结束的那条最短路径的长度。则可以很容易的得到以下结论:
如果下一条最短路径是到结点u,则这条路径是从处开始而在u
处结束,并且只 那些在S中的结点。
所生成的下一个路径的终点u必定是所有不在S内的结点中具有最小距离Dist(u)的结点。
如二中那样选出了结点u并生成从到u的最短路径后,结点u就成为S中的一个成员。
由上述分析所知,单源点最短路径存在一个简单算法,这个算法实际上只求出从到G中所有其他结点的最短路径长度。
在此算法中,由于采用邻接矩阵,邻接矩阵采用数组存放,n结点图的空间复杂度为O(n2),由于在输入n个结点的邻接矩阵时,必须采用两重循环,因此,n结点计算产生的时间复杂度也为O(n2)。
3、源程序
#include
int matrix[100][100];
int length[100];
int f[100];
int path[100];
int top;
int add int a,int b if a 0 return 0;
if b 0 return 0;
return a+b; int cmp int a,int b if a b return 0;
if a 0 return 1;
if b 0 return -1;
if a b return 1;
return -1; void dijkstra int matrix[][100],int *length,int *f,int x,int n int i,j,k,m;
int u[100];
for i 0;i n;i++ length[i] matrix[x][i];
f[i] x;
u[i] 1; u[x] 0;
for j 0;j n-1;j++ m 0;k -1;
for i 0;i n;i++ if u[i]! 0 cmp m,length[i] 0 m length[i]; k i; if k -1 break;
u[k] 0;
for i 0;i n;i++ if u[i] ! 0 cmp add length[k],matrix[k][i] ,length[i] 0 length[i] add length[k],matrix[k][i] ; f[i] k; void outt_path int *f,int x,int n,int i int j;
if i x printf v%d,x ;
for j top-1;j 0;j-- printf v%d,path[j] ;
return ; path[top] i;
top++;
outt_path f,x,n,f[i] ; void outt int g[][100],int *length,int *f,int x,int n int i,j,k;
for i 0;i n;i++ if i x continue;
printf v%d- v%d\t,x,i ;
printf length:%d\t,length[i] ;
printf path: ;
outt_path f,x,n,i ;
top 0;
printf \n ; int main int i,j,k,n,x;
printf 单源点最短路径算法实验\n ; printf 输入结点数: ;
scanf %d,n ;
printf \n ;
printf 输入成本矩阵:\n ;
for i 0;i n;i+
您可能关注的文档
最近下载
- 3-8岁儿童阅读能力评估.docx VIP
- 弘扬优良作风锻造新时代党员队伍PPT2025党员思想教育学习课件(含文字稿).pptx VIP
- 海底捞奖惩制度四色卡原则.docx VIP
- 2025年辽宁省初中学业水平考试(锦州市卷)中考英语试题含解析答案.pdf VIP
- 2025年客运实操试题题库.docx VIP
- 黑龙江省齐齐哈尔市龙沙区2024-2025学年九年级上学期期中考试物理试题(含答案).pdf VIP
- 外侧脚手架搭设方案.pdf VIP
- 苏教版数学六年级上册第一单元长方体和正方体大单元整体教学设计.pdf
- 图形的初步认识(说课稿)-2024-2025学年一年级上册数学苏教版.docx VIP
- 斗轮机全自动无人操作系统改造可行性研究报告.doc VIP
文档评论(0)