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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(网络流宇宙旅行.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络流宇宙旅行.docx

1、网络流宇宙旅行软件综合课程设计 网络流:宇宙旅行图书借阅管理系统 二一四 年 六 月数据结构课程设计报告一、网络流:宇宙旅行1问题陈述在走遍了地球上的所有景点以后,旅游狂人开始计划他的宇宙旅行项目。经过谨慎调查,他目前掌握了一张各卫星空间站可以临时容纳的旅客人数列表。但旅客从一个星球飞往另一个星球时,需要在若干卫星空间站临时停靠中转,而这些空间站不能接待任何旅客驻留,旅客必须立刻转乘另一艘飞船离开,所以空间站不能接待超过自己最大容量的旅客流。为了估计预算,现在旅游狂人需要知道终点星球的接待站应该设计多大容量,才能使得每艘飞船在到达时都可以保证让全部旅客下船。输入要求:输入若干组测试数据组成。每

2、组测试数据的第1行包含旅行的起点星球和终点星球的名称和一个不超过500的正整数N(N为0标志全部测试结束,不要对该数据做任何处理)。接下来的N行里,数据格式为:sourcei capacityi ,其中sourcei和destinationi是卫星空间站的名称或起点、终点星球的名称,正整数capacityi是飞船从sourcei到destinationi一次能运载的最大旅客流量。每个名称是由AZ之间三个大写字母组成的字符串,例如:ZJU。测试数据中不包含任何到达起点星球的信息以及任何从终点星球出发的信息。输出要求:对每一组测试,在一行里输出终点星球接待站应具有的最小容量,使得每艘飞船在到达时都

3、可以保证让全部旅客下船。2程序代码(一部分)#include #include Graph.h#include Queue1.h#define N 10 / Construction/Destruction/typedef int dataType; /抽象数据类型dataType定义为intGraph:Graph() /初始化图的结点集合和邻接矩阵 int i,j; for(i=0;iMaxSize;i+) /初始化图的结点集合 vertexi= ; for(i=0;iMaxSize;i+) /初始化图的邻接矩阵 for(j=0;jMaxSize;j+) if(i=j) matij=0; /

4、数据元素权值为0 else matij=MaxCost; /权值为无穷大 vertCount=0; /当前结点数为0 edgeCount=0; /当前边数为0Graph:Graph() void Graph:createGraph(int n,char vert,int m,EdgeNode1 edge) /以结点集合和边集合构造一个图 vertCount=n; /图的结点个数 int i,j,k; for(i=0;in;i+) /初始结点加入结点集合 vertexi=verti; edgeCount=m; /图的边数 for(k=0;km;k+) /初始边值加入邻接矩阵 i=edgek.in

5、it; /边的起点 j=edgek.end; /边的终点 matij=edgek.weight; /边的权值 void Graph:unvisited() /设置未访问标记 for(int i=0;ivertCount;i+) visitedi=0;ostream& operator(ostream& out,Graph &g1) /输出图的结点集合和邻接矩阵 cout图的结点集合为 ; int i,j; for(i=0;ig1.vertCount-1;i+) coutg1.vertexi, ; coutg1.vertexiendl; cout图的邻接矩阵为endl; for(i=0;ig1.

6、vertCount;i+) for(j=0;jg1.vertCount;j+) if(g1.matij=MaxCost) /权值为无穷大时 coutt; else coutg1.matij t; coutendl; return out;/顺序循环队列类图的广度优先遍历算法中,同样需要使用成员变量visited数组。算法实现如下:void Graph:breadthfs(int k) /从结点k开始的广度优先遍历 /k为起始结点下标 Queue1 q1(vertCount); /设置空队列 int i=k; char *vertN=EAR,AAA,BBB,CCC,DDD,EEE,FFF,GGG

7、,DFE,EAM; coutverti ; /访问起始结点 visitedi=1; /设置访问标记 q1.enQueue(i); /访问过的结点k入队 while(!q1.isEmpty() /队列不空时 i=q1.deQueue(); /出队,i是结点k的数组下标 int j=0; while(j0 & matijMaxCost & visitedj=0) coutvertj ; /访问结点 visitedj=1; q1.enQueue(j); /入队 else j+; void Graph:breadthFirstSearch() /图的广度优先遍历 /k为起始结点下标 cout请按照以下

8、代号所提供的景点参观:endl; int k=0; unvisited(); breadthfs(k); coutendl; void Graph:depthfs(int k) /从结点k开始的深度优先遍历 int i=k,j=0; /i下标从0开始 char *vertN=EAR,AAA,BBB,CCC,DDD,EEE,FFF,GGG,DFE,EAM; coutverti ; /访问结点 visitedi=1; /设置访问标记 while(j0 & matijMaxCost & visitedj=0) depthfs(j); /递归 else j+;void Graph:depthFirst

9、Search() /图的深度优先遍历 cout请按照以下代号所提供的景点参观:endl; int k=0; unvisited(); /设置未访问标记 depthfs(k); coutendl;/求原点到某一点的最短路径/void Graph:ShortestPath_1(Graph &G) /v0顶点到其余结点的最短距离Pv及路径长度Dv int i,v,w,pre,min,v0=0; int finalMaxSize; int *P,*D; char *vertN=EAR,AAA,BBB,CCC,DDD,EEE,FFF,GGG,DFE,EAM; D=new intG.vertCount;

10、P=new intG.vertCount; for(v=0;vG.vertCount;+v) Dv=G.matv0v; if(Dv!=MaxCost) Pv=v0; else Pv=0; for(i=0;iG.vertCount;i+) finali=0; finalv0=1; /开始主循环,每次求得v0到某个v顶点的最短路径,并加v到集合 for(i=1;iG.vertCount;+i) min=MaxCost; for(w=0;wG.vertCount;+w) if(!finalw) & (Dwmin) /w在顶点V-S中 min=Dw; v=w; finalv=1; for(w=0;wD

11、v+G.matvw) Dw=Dv+G.matvw; Pw=v+1; cout 您现在的位置是0:地球宇宙旅行服务中心endl; cout -endlendl; for(i=0;iG.vertCount;i+) cout 到达景点verti的路径长度:Diendl; pre=Pi; cout 路径如下:verti; while(pre!=0) cout-verti; pre=Ppre-1; cout-vert0endl; cout终点需要的容量在各个景点介绍中涉及-endl;/建立最小生成树/void Graph:MiniSpanTree_PRIM(Graph &G) /从序号为0的顶点出发,建

12、立最小生成树,n为结点个数,存于数组closevertex中 int lowcostMaxSize,mincost; int i,j,k; int *closevertex; char *vertN=EAR,AAA,BBB,CCC,DDD,EEE,FFF,GGG,DFE,EAM; closevertex=new intG.vertCount; coutendl请参照如下路径参观:endl; for(i=1;iG.vertCount;i+) lowcosti=G.mat0i; closevertexi=1; lowcost0=0; closevertex0=1; k=1; int bMaxSiz

13、e,a=0; coutvert0; for(i=1;iG.vertCount;i+) mincost=MaxCost; j=1; while(jG.vertCount) if(lowcostj!=0 & lowcostjmincost) mincost=lowcostj; k=j; j+; coutvertk; bi=mincost; lowcostk=0; for(j=1;jG.vertCount;j+) if(G.matkjlowcostj) lowcostj=G.matkj; closevertexj=k+1; for(i=1;iG.vertCount;i+) a+=bi; couten

14、dl总距离:a宇宙距离endl; cout终点站需要500的容量BI; BookInfo* t; BookInfo* m; do input:输入图书编号; if(m=SearchBook(S,Tempcode) input:这类书已有库存.n输入图书的入库量 m-b_Total+=num; else t=(BookInfo*)malloc(sizeof(BookInfo); t-b_Code=Tempcode; input:输入图书的名称:; input:输入图书价格:; input:输入图书的入库量:; t-b_Out=0; t-nextbook=p-nextbook; p-nextboo

15、k=t; S-BookTotal+; while(1); 查询图书BookInfo* SearchBook(System* S,int code)BookInfo* bi=S-BI-nextbook;int bookcode;if(code=-1) input:请输入要查询的图书编号:; else bookcode=code; while(bi&bi-b_Code!=bookcode)bi=bi-nextbook; if(code=-1) if(!bi)cout没找到你所要的图书.endl; else input:图书编号为:b_Code input:图书名称为:b_Name input:图书

16、价格为:b_price input:借阅人编号为:b_person input:图书库存量为:b_Total input:图书借出量为:b_Out return bi; 删除图书 void DelBook(System* S) BookInfo* bi; BookInfo* pl=S-BI; MemberInfo* memi;do pl=S-BI; bi=pl-nextbook; memi=S-MI-nextmember; input:请输入要删除的图书的编号:; while(bi) if(bi-b_Code=tempcode)break; pl=bi; bi=bi-nextbook; if(

17、bi=0) input:没有找到要删除的图书; else pl-nextbook=bi-nextbook; S-BookTotal-; while(memi) for(i=1;il_Codes0;i+) if(memi-l_Codesi=tempcode)break; if(il_Codes0) for(;il_Codes0;i+)memi-l_Codesi=memi-l_Codesi+1; memi-l_Codes0-; memi=memi-nextmember; free(bi); input:还有图书要删除吗?(Y/N); if(sel=N|sel=n) input:删除图书结束! re

18、turn; while(1); 借书处理void BorrowBook(System* S) BookInfo* bi=S-BI-nextbook; BookInfo* p; MemberInfo* mp; do input:输入要借出的书号:; p=SearchBook(S,tempcode); if(!p) input:没有找到要借出的图书. else input:此书的现存量为b_Total-p-b_Out); if(!(p-b_Total-p-b_Out)cout0.endl;/已借出 else input:请输入会员编号:; mp=SearchMember(S,memcode); i

19、f(!mp) input:会员编号输入错误,外借失败l_Codes0=5) input:借书量不能超过5本; else p-b_Out+; mp-l_Codes+mp-l_Codes0=tempcode; input:外借成功. p-b_person=mp-m_Code; input:n还有图书要借出吗?(Y/N); if(sel=N|sel=n) input:外借操作结束. return; while(1);还书处理void TurnBackBook(System* S) BookInfo* bi=S-BI-nextbook; BookInfo* p; MemberInfo* mp;do i

20、nput:输入归还书号:; p=SearchBook(S,tempcode); if(!p) input:书号输入错误.; else input:此书的现存量为b_Total-p-b_Out); input:请输入会员编号:; if(!(mp=SearchMember(S,membercode) input:会员编号输入错误,归还失败b_Out-; for(i=1;il_Codes0;i+) if(mp-l_Codesi=tempcode)break; while(il_Codes0) mp-l_Codesi=mp-l_Codesi+1; i+; mp-l_Codes0-; input:还有要归还的图书吗?(Y/N); if(sel=N|sel=n) input:归还

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

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