数据结构课程设计报告
来源:互联网 发布:windows平板电脑排行 编辑:程序博客网 时间:2024/05/04 09:25
#include<stdio.h> #include<iostream.h>#include<stdlib.h> #include<conio.h> #include<malloc.h> #include<string.h> #define MAX 10000 #define MAXLEN 8 #define ADJTYPE int typedef struct //图中顶点表示点,存放点名称 { char name[30]; int num; }VEXTYPE; typedef struct { VEXTYPE vexs[MAXLEN]; //顶点的信息 ADJTYPE arcs[MAXLEN][MAXLEN]; //邻接矩阵 int vexnum,arcnum ; //顶点数和边数 }MGraph;MGraph b; MGraph InitGraph() //建立无向网的邻接矩阵结构{ int i, j; MGraph G; G.vexnum =8; //存放顶点数 G.arcnum =13; //存放边点数 for(i=0;i<G.vexnum;i++) G.vexs[i].num=i; //学校主要建筑物 strcpy(G.vexs[0].name,"主教学楼"); strcpy(G.vexs[1].name,"商业中心"); strcpy(G.vexs[2].name,"图书馆"); strcpy(G.vexs[3].name,"中心广场"); + strcpy(G.vexs[4].name,"科技楼"); strcpy(G.vexs[5].name,"校医院"); strcpy(G.vexs[6].name,"第三食堂"); strcpy(G.vexs[7].name,"小剧院"); for(i=0;i<G.vexnum;i++) for(j=0;j<G.vexnum;j++) //邻接点之间的距离 G.arcs[i][j]=MAX; G.arcs[0][1]=130; G.arcs[0][2]=80; G.arcs[0][3]=100; G.arcs[0][6]=400; G.arcs[1][2]=100; G.arcs[2][3]=50; G.arcs[2][4]=100; G.arcs[3][6]=150; G.arcs[3][4]=70; G.arcs[4][5]=300; G.arcs[4][6]=250; G.arcs[5][6]=400; G.arcs[6][7]=300; for(i=0;i<G.vexnum;i++) for(j=0;j<G.vexnum;j++) G.arcs[j][i]=G.arcs[i][j]; return G;}void Menu() //输出菜单,控制台界面{ cout<<"---------------------------------------------------------"<<endl;cout<<"@@@@@@@@@@@@@欢迎进入广东海洋大学平面导航系统@@@@@@@@@@@@"<<endl;cout<<"---------------------------------------------------------"<<endl;cout<<" "<<endl;cout<<"**请选择服务项目: "<<endl;cout<<" 1---------输出点的信息 "<<endl; cout<<" 2---------输出边的信息 "<<endl; cout<<" 3---------修改相关信息 "<<endl; cout<<" 4---------求出最短路径 "<<endl; cout<<" 5---------查看平面简图 "<<endl; cout<<" 0---------退出 "<<endl; cout<<" "<<endl; cout<<"---------------------------------------------------------"<<endl; } void PutOutVex(MGraph *G) //菜单1:输出每个顶点的信息{ int v; for(v=0;v<G->vexnum;v++) cout<<G->vexs[v].num<<G->vexs[v].name<<endl; }void PutOutArc(MGraph *G) //菜单2:输出每条边的信息{ for(int i=0;i<G->vexnum;i++) for(int j=0;j<G->vexnum;j++) if(G->arcs[i][j]<MAX) { cout<<"从" <<G->vexs[i].name<<"到"<<G->vexs[j].name<<G->arcs[i][j]<<endl; }}void Change(MGraph *G) //菜单3:修改两点之间边长信息{ int v0,v1,length; cout<<"change"<<endl; cin>>v0; cin>>v1; cout<<"length:"; cin>>length; G->arcs[v0][v1]=G->arcs[v1][v0]=length;}void Dijkstra(MGraph * G) //菜单4:迪杰斯特拉算法求最短路径{ int v,w,i,min,t=0,x,v0,v1; int final[20], D[20], p[20][20]; cout<<"请输入源顶点: "<<endl; cin>>v0; if(v0<0||v0>G->vexnum) { cout<<"此点编号不存在!请重新输入顶点编号: "<<endl; cin>>v0; } cout<<"请输入结束顶点: "<<endl; cin>>v1; if(v1<0||v1>G->vexnum) { cout<<"此点编号不存在!请重新输入顶点编号: "<<endl; cin>>v1; } for(v=0;v<G->vexnum;v++) // 初始化final[20],p[20][20],final[v]=1即已经求得v0到v的最短路径 { //p[v][w]=1则是w从v0到v当前求得最短路径上的顶点,D[v]带权长度 final[v]=0; D[v]=G->arcs[v0][v]; for(w=0;w<G->vexnum;w++) p[v][w]=0; if(D[v]<MAX) { p[v][v0]=1;p[v][v]=1; } } D[v0]=0;final[v0]=1; for(i=1;i<G->vexnum;i++) { min=MAX; for(w=0;w<G->vexnum;w++) if(!final[w]) if(D[w]<min){v=w;min=D[w];} final[v]=1; for(w=0;w<G->vexnum;w++) if(!final[w]&&(min+G->arcs[v][w]<D[w])) { D[w]=min+G->arcs[v][w]; for(x=0;x<G->vexnum;x++) p[w][x]=p[v][x]; p[w][w]=1; }} cout<<"从"<<G->vexs[v0].name<<"到"<<G->vexs[v1].name<<"的最短路径长度为:"<<D[v1]<<endl; cout<<"路径为: "<<endl; for(int j=0;j<G->vexnum;j++){ if(p[v1][j]==1) cout<<G->vexs[j].name<<endl;}}void map(MGraph *G) //菜单5:地图 {cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃*********************[广东海洋大学地形简图]********************8┃"<<endl;cout<<"┃ ┃"<<endl;cout<<"┃ ┃"<<endl; cout<<"┃ ┌──────[校医院] ┃"<<endl;cout<<"┃ │ │ ┃"<<endl;cout<<"┃ │ │ ┃"<<endl;cout<<"┃ │ │ ┃"<<endl;cout<<"┃ ┌───────[第三食堂]─────[科技楼]─────┐ ┃"<<endl;cout<<"┃ │ │ │ │ │ ┃"<<endl;cout<<"┃ [小剧场] │ │ │ │ ┃"<<endl;cout<<"┃ │ └──────[中心广场]──[图书馆] ┃"<<endl;cout<<"┃ │ │ │ ┃"<<endl;cout<<"┃ └───────[主教学楼]────┤ ┃"<<endl;cout<<"┃ │ ┃"<<endl;cout<<"┃ │ ┃"<<endl;cout<<"┃ [商业中心] ┃"<<endl;cout<<"┃ ┃"<<endl;cout<<"┃ ┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}void main() //主函数{ system("color 8F"); int a; b=InitGraph(); Menu(); cin>>a; while(a!=8) { switch(a) { case 1:PutOutVex(&b);Menu();break; case 2:PutOutArc(&b);Menu();break; case 3:Change(&b);Menu();break; case 4:Dijkstra(&b);Menu();break;case 5:map(&b);Menu();break; case 0:exit(1);break; default:break; } cin>>a; }
}调试过程见报告文件
一、题目
题目0:校园最短路径问题
GDOU是真是一个好地方,校园如一座大花园,美丽而宽广。校园有许多建筑如教学楼、饭堂、宿舍楼、图书馆、体育馆、运动场、商业街、医院等,还有一些著名的风景点。现请根据学校的平面图,找出一些重要的场所,画出学校的平面图(场所可以根据其重要性适当减少),根据实际画出不同点间的路径,并估算每两个场所间的路径长。请设计数据结构并编程,当给出一个出发点和要到达另外一个场所的信息时,请给出最佳路径,并输出路径相关信息。
二、功能
要求完成以下功能:
a) 输出顶点信息:将校园内各位置输出。
b) 输出边的信息:将校园内每两个位置(若两个位置之间有直接路径)的距离输出。
c) 修改:修改两个位置(若两个位置之间有直接路径)的距离,并重新输出每两个位置(若两个位置之间有直接路径)的距离。
d) 求最短路径:输出给定两点之间的最短路径的长度及途径的地点或输出任意一点 与其它各点的最短路径。
e) 查看平面图:画出学校的简易平面交通图,
f) 退出:退出程序
三、课程设计要求:
1、使用数据结构相关知识来做。语言工具不受限。
2、独立完成,设计算法并编写代码,调试通过。
3、写设计说明书。
4、以个人独立完成。每一个选择一个题目。
5、时间:从第13周开始收集资料,进行准备。具体设计时间在16-17周(等实验室安排)。在设计周周五检查(在机房子单独接受老师检查并提问),次周周五前提交设计说明书(实习报告)。
6、实习单独计算成绩,学分1分,成绩好坏和考试没关系。
四、分析
1、实现要点:
1)对图的创建采用邻接矩阵的存储结构,而且对图的操作设计成了模板类。为了便于处理,对于图中的每一个顶点和每一条边都设置了初值。
2)为了便于访问,用户可以先输出所有的地点和距离。
3)用户可以随意修改两点之间好的距离。
4)当用户操作错误时,系统会出现出错提示。
2、概要设计:
1)抽象数据类型图的定义如下:
ADT Graph{
数据对象V:V是具有相同特性数据元素的集合,称为顶点集。
数据关系R:
R={VR}
VR={(v,w)| v , w∈V, (v , w)表示v和w之间存在路径}
基本操作P:
CreatGraph(&G, V, VR)
初始条件: V是图的顶点集,VR是图中边的集合。
操作结果: 按定义(V, VR) 构造图G。
DestroyGraph(&G)
初始条件: 图G已存在。
操作结果: 销毁图。
LocateVex(G, u)
初始条件: 图G存在,u和G中顶点具有相同特征。
操作结果: 若G中存在顶点u,则返回该顶点在图中“位置” ;否则返回
其它信息。
GetVex(G, v)
初始条件: 图G存在,v是G中某个顶点。
操作结果: 返回v的信息。
} ADT Graph
2)程序结构
A)主程序
void main()
{
初始化;
while(“命令”!=“退出”)
{
Switch语句
接受命令(输入选择项序号);
处理命令;
}
}
B)各程序块功能
typedef struct //图中顶点表示点,存放点名称
void Menu() //输出菜单
void PutOutVex(MGraph *G) //输出每个顶点的信息
void PutOutArc(MGraph *G) //输出每条边的信息
void Dijkstra(MGraph * G) //迪杰斯特拉算法求最短路径
void map(MGraph *G) //海大平面简易地图
void main() //主函数
3)本程序运用函数的调用,只有两个模块,它们的调用关系为:
主程序模块---------------> 带权无向图模块
- 《数据结构》课程设计报告
- 数据结构课程设计实习报告
- 数据结构课程设计报告
- 数据结构课程设计报告
- 《数据结构》课程设计报告
- 数据结构课程设计报告
- 数据结构课程设计报告
- 数据结构课程设计报告
- 数据结构课程设计报告
- 《数据结构课程设计》报告
- 数据结构课程设计报告
- 数据结构 课程设计报告
- 数据结构课程设计实验报告
- 【“BattenSnakexjp4.1”数据结构课程设计报告】
- 数据结构课程设计解题报告 前言
- 数据结构课程设计——迷宫问题课程设计报告
- 数据结构课程设计报告(附代码)
- 数据结构课程设计报告-职工信息管理系统
- 字符串 指针二维数组
- 获取屏幕尺寸——Android学习笔记
- 如何找到java对应的c/c++源码
- ROUGE评价方法详解(二)
- 文件与图的邻接表
- 数据结构课程设计报告
- 像素及相互转换——Android学习笔记
- 大数学习笔记
- hdu4614----Vases and Flowers
- IOS1.6-UIImageView 和 UIImage
- 在ScrollView中嵌套ListView时,需要根据内容来设置listView的高度
- 警告: Can't transform property 'acceptEvent' from java.lang.String into java.util.List. Will register
- 【课程设计】题目1
- HDU 5159 Card (组合数学)