ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:80.74KB ,
资源ID:4036619      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4036619.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(石大远程在线考试《数据结构》课程设计建立通信网络参考答案.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

石大远程在线考试《数据结构》课程设计建立通信网络参考答案.docx

1、石大远程在线考试数据结构课程设计建立通信网络参考答案中国石油大学(北京)远程教育学院数据结构课程设计报告石大远程在线考试数据结构建立通信网络第二题参考答案、尾号3,4,51需求分析在n个城市建设通信网络,只需架设n-1条线路即可。设计算法,求出如果以最低的经济代价建设这个通信网络。要求如下:(1) 至少包含10个城市;(2) 城市数n由键盘录入;(3) 城市坐标由随机函数产生小于100的整数;(4) 输出生成树中各条边以及它们的权值;2概要设计 图的存储:用邻接矩阵,这样会方便不少。邻接矩阵是一个二维数组,数组中的元素是边的权(一些数值),数组下标号为结点的标号。(1)例如二维数组中的一个元素

2、M56的值为39,则表示结点5、6连接,且其上的权值为39。(2)用邻接矩阵存储图,对图的读写就简单了。因为邻接矩阵就是一个二维数组,因此对图的读写就是对二维数组的操作。只要能弄清楚边的编号,就能把图读入了。3详细设计 /最短路径#ifndef MYGRAPH_H_#define MYGRAPH_H_class MyGraphpublic: void readDirectedGraph(); MyGraph(int size);/构造函数中设置图的大小,分配空间 void writeGraph(); void shortPath(int source);/求最短路径 protected:pri

3、vate: int *m_graph;/用二维数组保存图 int m_size;/图的大小 ;#endif/构造函数中设置图的大小,分配空间MyGraph:MyGraph(int size) int i,j; m_size=size; /给图分配空间 m_graph=new int* m_size; for (i=0;im_size;i+) m_graphi=new intm_size; for (i=0;im_size;i+) for(j=0;jm_size;j+) m_graphij=INT_MAX; 4程序测试 5感想与体会 本次实验主要是学习掌握图的存储结构,学会编写求最短路径的算法。

4、本次实验的算法虽有点复杂,但是多上机练习,完成本次实验也不是难事。通过这次课程设计,我收获了不少的东西。我选择的题目是最小生成树,这个问题看这简单,但是做起来有非常大的困难。平时我们很注重理论学习,但现在看来,实践也是非常重要的,两者缺一不可。在这期间我遇到了不少的问题,问同学,查资料,虽然过程是辛苦琐碎的,但最后成果出来还是很鼓舞人心的。#include#include #include #include #include using namespace std;struct primnodepublic: char begvex; char endvex; int lowcost;stru

5、ct adknode int dist;/最近距离 char way50;/顶点数组 int nodenum;/经过的顶点数;class Mgraph/邻接矩阵储存结构public: Mgraph() Mgraph() void CreatMGraph(); void DFS (int );/用递归实现 void DFS1(int );/非递归 void BFS(int ); void print(); void prim(); int mini(); int low();/最短距离函数的辅助函数 int LocateVex(char); void kruskal(); void Dijkst

6、ra(); void Floyd();private: int number;/顶点数目 int arcnum;/边的数目 char vexs50; int arcs5050; int visited50;/便利时的辅助工具 primnode closeedge50;/prim adknode dist50;/最短路径 int D2020;/floyd算法距离 int P202020;/floyd算法路径; int Mgraph:LocateVex(char s) for(int i=0;inumber;i+) if (vexsi=s) return i; return -1;void Mgr

7、aph:print() cout顶点为: ; for(int k=0;knumber;k+) coutvexsk; coutendl; for(int i=0;inumber;i+) for(int j=0;jnumber;j+) coutsetw(6)leftarcsij ; coutendl; for(int m=0;mnumber;m+) coutvisitedm; coutendl;void Mgraph:CreatMGraph()/图的邻接矩阵储存结构 char vex1,vex2; int i,j,k,m; cout请输入定点数,边数:numberarcnum; cout请输入顶点

8、(字符串类型):endl; for(i=0;ivexsi; for(i=0;inumber;i+) for(j=0;jnumber;j+) arcsij=1000; for(k=0;karcnum;k+) cout请输入边的两个顶点及边的权值: vex1vex2m; i=LocateVex(vex1); j=LocateVex(vex2); arcsij=m; arcsji=m; void Mgraph:DFS(int i=0)/用递归实现 int j; coutvexsi; visitedi=1; for (j=0;jnumber;j+) if(!(arcsij=1000)&!visited

9、j) DFS(j); void Mgraph:DFS1(int i=0)/非递归 stack st; st.push(i); while(!st.empty() int j=st.top(); st.pop(); coutvexsj; visitedj=1; for(int k=0;knumber;k+) if(!(arcsjk=1000)&!visitedk) st.push(k); void Mgraph:BFS(int i=0)/广度优先遍历 deque de; de.push_back(i); coutvexsi; visitedi=1; while(!de.empty() int k

10、=de.front(); for(int j=0;jnumber;j+) if(arcskj!=1000&!visitedj) coutvexsj; visitedj=1; de.push_back(j); de.pop_front(); int Mgraph:mini() static int i; int min=0; for (int j=0;jcloseedgej.lowcost) min=j; i=min; cout包括边(closeedgei.begvex,closeedgei.endvex); return i;void Mgraph:prim() char u; cout请输入

11、起始顶点:u; int i=LocateVex(u); visitedi=1; for(int j=0;jnumber;j+) closeedgej.begvex=u; closeedgej.endvex=vexsj; closeedgej.lowcost=arcsij; for (int m=1;mnumber;m+) int n=mini(); visitedn=1; closeedgen.lowcost=1000; for (int p=0;pnumber;p+) if(!visitedp) if(arcspncloseedgep.lowcost) closeedgep.lowcost=

12、arcspn; closeedgep.begvex=vexsn; void Mgraph:kruskal() int a,b,k=0; int min=1000; int arcs12020; for (int m=0;mnumber;m+) visitedm=m;/每一个顶点属于一颗树 for (int i=0;inumber;i+) for(int j=0;jnumber;j+) arcs1ij=arcsij; while (knumber-1) min=1000; for (int i=0;inumber;i+) for (int j=0;jnumber;j+) if (arcs1ijm

13、in) a=i; b=j; min=arcs1ij; if (visiteda!=visitedb) cout包括边(vexsa,vexsb); k+; for (int n=0;nnumber;n+) if (visitedn=visitedb) visitedn=visiteda; else arcs1ab=arcsba=1000; void Mgraph:Dijkstra() cout请输入起始点u; int i=LocateVex(u); visitedi=1; for (int j=0;jnumber;j+) distj.dist=arcsij; distj.nodenum=0; f

14、or (j=1;jnumber;j+) int distance=1000; int min=0; for (int n=0;ndistn.dist) distance=distn.dist; min=n; int m=min; visitedm=1; for (n=0;nnumber;n+) if(!visitedn) if(distm.dist+arcsmn)distn.dist) distn.dist=distm.dist+arcsmn; distn.nodenum=0; for (int x=0;xdistm.nodenum;x+) distn.wayx=distm.wayx; dis

15、tn.nodenum+; distn.waydistn.nodenum+=vexsm; /输出功能 for (int n=0;nnumber;n+) if (n!=i) if(distn.dist1000) coutvexsi到vexsn的最近距离为:distn.distendl; cout经过的顶点为:vexsi; for (int p=0;pdistn.nodenum;p+) coutdistn.wayp; coutvexsnendl; else coutvexsi到vexsn没有通路endl; void Mgraph:Floyd() int i,j,m,n; for ( i=0;inum

16、ber;i+) for ( j=0;jnumber;j+) for (m=0;mnumber;m+) Pijm=0; for ( i=0;inumber;i+) for ( j=0;jnumber;j+) Dij=arcsij; if(Dij1000) Piji=1; Pijj=1; for ( i=0;inumber;i+) for ( j=0;jnumber;j+) for (m=0;mnumber;m+) if (i=j|j=m|i=m) continue; if (Dim+DmjDij) Dij=Dim+Dmj; for (n=0;nnumber;n+) Pijn=Pimn|Pmjn; for ( i=0;inumber;i+) for ( j=0;jnumber;j+) if (Dij1000) coutvexsi到vexsj的最近距离为:Dijendl; cout经过的顶点为:; for (m=0;mnumber;m+) if (Pijm) coutvexsm; coutendl; else if (i!=j) coutvexsi到vexsj没有通路endl; int main() Mgraph g; g.CreatMGraph(); g.Floyd(); return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1