网络流宇宙旅行.docx
- 文档编号:10954759
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:46
- 大小:1.32MB
网络流宇宙旅行.docx
《网络流宇宙旅行.docx》由会员分享,可在线阅读,更多相关《网络流宇宙旅行.docx(46页珍藏版)》请在冰豆网上搜索。
网络流宇宙旅行
软件综合课程设计
网络流:
宇宙旅行
图书借阅管理系统
二〇一四年六月
《数据结构课程设计》报告
一、网络流:
宇宙旅行
1.问题陈述
在走遍了地球上的所有景点以后,旅游狂人开始计划他的宇宙旅行项目。
经过谨慎调查,他目前掌握了一张各卫星空间站可以临时容纳的旅客人数列表。
但旅客从一个星球飞往另一个星球时,需要在若干卫星空间站临时停靠中转,而这些空间站不能接待任何旅客驻留,旅客必须立刻转乘另一艘飞船离开,所以空间站不能接待超过自己最大容量的旅客流。
为了估计预算,现在旅游狂人需要知道终点星球的接待站应该设计多大容量,才能使得每艘飞船在到达时都可以保证让全部旅客下船。
输入要求:
输入若干组测试数据组成。
每组测试数据的第1行包含旅行的起点星球和终点星球的名称和一个不超过500的正整数N(N为0标志全部测试结束,不要对该数据做任何处理)。
接下来的N行里,数据格式为:
sourceicapacityi,其中sourcei和destinationi是卫星空间站的名称或起点、终点星球的名称,正整数capacityi是飞船从sourcei到destinationi一次能运载的最大旅客流量。
每个名称是由A~Z之间三个大写字母组成的字符串,例如:
ZJU。
测试数据中不包含任何到达起点星球的信息以及任何从终点星球出发的信息。
输出要求:
对每一组测试,在一行里输出终点星球接待站应具有的最小容量,使得每艘飞船在到达时都可以保证让全部旅客下船。
2.程序代码(一部分)
#include
#include"Graph.h"
#include"Queue1.h"
#defineN10
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
//typedefintdataType;//抽象数据类型dataType定义为int
Graph:
:
Graph()//初始化图的结点集合和邻接矩阵
{
inti,j;
for(i=0;i vertex[i]=''; for(i=0;i for(j=0;j if(i==j) mat[i][j]=0;//数据元素权值为0 else mat[i][j]=MaxCost;//权值为无穷大 vertCount=0;//当前结点数为0 edgeCount=0;//当前边数为0 } Graph: : ~Graph() { } voidGraph: : createGraph(intn,charvert[],intm,EdgeNode1edge[]) {//以结点集合和边集合构造一个图 vertCount=n;//图的结点个数 inti,j,k; for(i=0;i vertex[i]=vert[i]; edgeCount=m;//图的边数 for(k=0;k { i=edge[k].init;//边的起点 j=edge[k].end;//边的终点 mat[i][j]=edge[k].weight;//边的权值 } } voidGraph: : unvisited()//设置未访问标记 { for(inti=0;i visited[i]=0; } ostream&operator<<(ostream&out,Graph&g1) {//输出图的结点集合和邻接矩阵 cout<<"图的结点集合为{"; inti,j; for(i=0;i cout< cout< cout<<"图的邻接矩阵为"< for(i=0;i { for(j=0;j if(g1.mat[i][j]==MaxCost)//权值为无穷大时 cout<<"∞\t"; else cout< cout< } returnout; } //顺序循环队列类图的广度优先遍历算法中,同样需要使用成员变量visited数组。 算法实现如下: voidGraph: : breadthfs(intk)//从结点k开始的广度优先遍历 {//k为起始结点下标 Queue1q1(vertCount);//设置空队列 inti=k; char*vert[N]={"EAR","AAA","BBB","CCC","DDD","EEE","FFF","GGG","DFE","EAM"}; cout< visited[i]=1;//设置访问标记 q1.enQueue(i);//访问过的结点k入队 while(! q1.isEmpty())//队列不空时 { i=q1.deQueue();//出队,i是结点k的数组下标 intj=0; while(j if(i! =j&&mat[i][j]>0&&mat[i][j] { cout< visited[j]=1; q1.enQueue(j);//入队 } else j++; } } voidGraph: : breadthFirstSearch()//图的广度优先遍历 {//k为起始结点下标 cout<<"请按照以下代号所提供的景点参观: "< unvisited(); breadthfs(k); cout< } voidGraph: : depthfs(intk)//从结点k开始的深度优先遍历 { inti=k,j=0;//i下标从0开始 char*vert[N]={"EAR","AAA","BBB","CCC","DDD","EEE","FFF","GGG","DFE","EAM"}; cout< visited[i]=1;//设置访问标记 while(j if(i! =j&&mat[i][j]>0&&mat[i][j] depthfs(j);//递归 else j++; } voidGraph: : depthFirstSearch()//图的深度优先遍历 { cout<<"请按照以下代号所提供的景点参观: "< unvisited();//设置未访问标记 depthfs(k); cout< } ///////////////////////////求原点到某一点的最短路径///////////////////////////////////////// voidGraph: : ShortestPath_1(Graph&G) {//v0顶点到其余结点的最短距离P[v]及路径长度D[v] inti,v,w,pre,min,v0=0; intfinal[MaxSize]; int*P,*D; char*vert[N]={"EAR","AAA","BBB","CCC","DDD","EEE","FFF","GGG","DFE","EAM"}; D=newint[G.vertCount]; P=newint[G.vertCount]; for(v=0;v { D[v]=G.mat[v0][v]; if(D[v]! =MaxCost) P[v]=v0; else P[v]=0; } for(i=0;i final[i]=0; final[v0]=1; //开始主循环,每次求得v0到某个v顶点的最短路径,并加v到集合 for(i=1;i { min=MaxCost; for(w=0;w if((! final[w])&&(D[w] { min=D[w]; v=w; } final[v]=1; for(w=0;w if((! final[w])&&(D[w]>D[v]+G.mat[v][w])) { D[w]=D[v]+G.mat[v][w]; P[w]=v+1; } } cout<<"您现在的位置是0: 地球宇宙旅行服务中心"< cout<<"--------------------------------"< for(i=0;i { cout<<"★到达景点"< "< pre=P[i]; cout<<"路径如下: "< while(pre! =0) { cout<<"<--"< pre=P[pre-1]; } cout<<"<--"< } cout<<"终点需要的容量在各个景点介绍中涉及----------------"< } //////////////////////建立最小生成树//////////////////////////////////////////////////////////// voidGraph: : MiniSpanTree_PRIM(Graph&G) {//从序号为0的顶点出发,建立最小生成树,n为结点个数,存于数组closevertex中 intlowcost[MaxSize],mincost; inti,j,k; int*closevertex; char*vert[N]={"EAR","AAA","BBB","CCC","DDD","EEE","FFF","GGG","DFE","EAM"}; closevertex=newint[G.vertCount];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 宇宙 旅行