北邮通信网理论基础-实验三四报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE \* MERGEFORMAT6 通信网理论基础实验三、实验四代码分析 24班 曹爽 2013210640 实验三:Floyd算法 代码说明: 首先输入顶点个数和边的个数(指有向边的个数,比如从1到2和从2到1是不一样的,算作两条有向边),确定问题规模。 之后输入各边起点、终点和权值,顶点名称默认为0、1、2……如从1到2的权值为3,则输入1[空格] 2[空格] 3[回车]。由于我采用的是有向图,因此从1到2和从2到1是不同的,需要输入两次。 待所有起点、终点和权值都输入完毕之后,整个图就建立完毕了。我没有采用输入邻接矩阵的形式,是考虑到有些点对之间可能没有边连接,此时即便用户输入一个很大的权值,也有可能被其他路径的权值之和超过,造成结果出错。并且如果邻接矩阵是一个稀疏矩阵,输入很多0也是不必要的。因此我采用起点、终点和权值逐个输入的方式,对于没有边连接的部分,全部赋值为INF(0xfffffff),省去了逐个输入的麻烦。 之后输入要查询的起点和终点,利用Floyd算法即可计算出最短路径的权值,并且打印出最短路径;如果起点和终点没有路径连通,则返回找不到对应路径。 代码注释: #includeiostream #define INF 0xfffffff //设置INF作为没有边时的赋值 using namespace std; int **dist,**path; int main() { int n,T; int i,j,k; int a,b,v; int start,finish,temp; cout请输入顶点个数:; cinn; dist=new int* [n]; path=new int* [n]; for(i=0;in;i++) //根据顶点个数建立矩阵 { dist[i]=new int [n]; path[i]=new int [n]; } for(i=0;in;i++) { for(j=0;jn;j++) dist[i][j]=INF; //先将全部元素赋值为INF } for(i=0;in;i++) dist[i][i]=0; //每个点到自身的连接设置为0(矩阵对角线为0) cout请输入边的个数:; cinT; cout请输入各边起点、终点与权值:(顶点名称默认为0,1,……,n-1)endl; while(T0) { cinabv; dist[a][b]=v; //根据有向边的个数和用户输入来设置权值 T--; } for(i=0;in;i++) //Floyd算法 { for(j=0;jn;j++) { if(dist[i][j]==INF) path[i][j]=0; else path[i][j]=j; } } for(k=0;kn;k++) { for(i=0;in;i++) { for(j=0;jn;j++) { if(dist[i][j]dist[i][k]+dist[k][j]) { dist[i][j]=dist[i][k]+dist[k][j]; path[i][j]=path[i][k]; } } } } cout请输入要查询的起点和终点:; cinstartfinish; if(dist[start][finish]!=INF) //判断起点终点之间是否连通 { //若连通,则给出最短路径权值和具体路径方式 cout最短路径为:dist[start][finish]endl; cout具体路径为:endl; temp=start; while(temp!=finish) { couttemp-; temp=path[temp][finish]; } coutfinishendl; } else cout找不到对应路径endl; //若不连通,返回找不到具体路径 return 0; } 测试结果: 选择一个有4个顶点(编号为0、1、2、3)和6条有向边的图,分别输入起点、终点和权值如下图所示。之后测试从0到2的最短路径。从数据可以看出,从0到2有三条路径: ① 0到1、1到2,权值为1+1=2; ② 0到2,权值为3; ③ 0到3、3到2,权值为1+3=4。 按照Floyd算法,应该选择权值为2的路径①作为最短路径。实验结果与预期相符 实验四:图的连通性判断 代码说明: 判断图的连通性,只需要判断途中任意两个节点是否能通过某种路径(依然采用有向的路径)到达即可。

文档评论(0)

annylsq + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档