西安郵電大學。
实验题目延安市旅游导游系统。
一、实验目的。
1.加深对《数据结构》这一课程所学内容的进一步理解与巩固。
2.通过完成课程设计,逐渐培养自己的编程能力;
3.培养给出题目后,构建框架,用计算机解决的能力;
4.通过调试程序积累调试c程序设计的经验;
二、实验内容。
编写一个延安市旅游导游系统,其中有平面图,有景点列表,可以查询景点简介,也可以查询两个景点间的最短路径,中转次数最少路径以及所有路径,其中要用到数据结构中的图的部分的知识。
三、需求分析。
1.开发系统功能描述。
1)菜单类函数。
void menushow()主界面菜单函数。
void menushow0()输出延安市旅游景点平面图。
void menushow1()延安市简介。
void menulist()旅游景点列表。
void s_menu()查询菜单。
2)查询两点间最短路径。(权值最小)
shortroad(mgraph *g)弗洛伊德法来查询两点间最短路径。
3)查询两点间所有路径。
depsearch(mgraph *g,int v,int w)
allroads(mgraph *g)
利用深度优先遍历图,递归的思想来完成所有路径的查找。
4).查询中转次数最少的路径。
int isempty(linkqueue *q)判断队是否为空函数。
int initqueue(linkqueue *q)初始化队列函数。
int enterqueue(linkqueue *q,int x)进队函数。
int deletequeue(linkqueue *q,int *x)出队函数。
int nextadjvertex(mgraph *g,int w,int v)求当前顶点的前一个顶点函数。
void bfs(mgraph *g,int vi,int vj)
void reseach(mgraph *g) 广度优先遍历图,递归思想完成查询中转次数最少的功能。
5).确定顶点位置函数。
int locatevertex(mgraph * g, char v)确定当前顶点所在矩阵位置函数。
6).查询景点简介函数。
void search_k (mgraph * g) 按景点名称查询。
void search_n (mgraph * g)按景点编号查询。
7).文件保存以及读出函数。
int read_info(mgraph *g)文件保存函数。
int s**e_info (mgraph * g)文件读出函数。
8).平面图的创建函数。
mgraph * creatudn(mgraph *g)平面图创建函数,若们有文件,则重新建立文件并保存。
9).主函数。
void main(void)
四、概要设计。
1、方案设计。
整个程序要实现的功能是导游功能,平面图如果文件里面有存储的话便从文件读出,如果没有存储便创建文件存储。
其中可以实现的功能为:按景点名称查询,按景点编号查询,查询两点间的所有路径,查询两点间的最短路径,查询两点间中转次数最少的路径。按景点名称查询和按景点编号查询在此不做赘述,重要介绍其他三种查询方式。
查询两点间所有路径:该查询方法应用的是深度优先遍历平面图的方法,其中定义两个数组,visit用来标记已遍历过的结点,path用来存储已找到景点的编号,利用递归的思想一层一层向下遍历,最后打印出path数组便可完成该功能。
查询两点间最短路径:该查询方法应用的是弗洛伊德算法,定义的两个二维数组d[和q[其中q数组是用来存储查询到最短路径的景点矩阵的,d数组是用来比较每两个景点之间的权值,每得到一个最小值便将d数组刷新一次,将最后结果存入q数组。
查询两点间中转次数最少的路径:利用广度优先思想遍历平面图。其中应用的队列的知识。
先将最后一个顶点入队,然后利用nextadjvertex函数求它的上一个结点,利用递归思想一直找到最开始的一个结点。
景区图:延安市主要景点平面图 ↑北延安杨家岭革命旧址延安大学
清凉山景区。
人民公园。二道街
中国抗日军政大学延河大桥百米大道
凤凰山景区
宝塔山。火车站。
万花山景区。
2.数据结构说明。
typedef struct arcell
int adj; /路径长度 */
arcell,adjmatrix[max_vertex_num][max_vertex_num];
adjmatrix[max_vertex_num][max_vertex_num];邻接矩阵。
typedef struct /*图中顶点表示主要景点,存放景点的编号、名称、简介等信息, *
char name[max]; 景点名称。
int num; 景点编号。
char introduction[1000];/简介*/
infotype;
typedef struct
infotype vexs[max_vertex_num]; 存储景点信息的数组。
adjmatrix arcs; 存储邻接矩阵的权值。
int vexnum;//图中的顶点数。
int arcnum; /图中的弧数。
mgraph;
/队列的结构体。
typedef struct node
int date;队列元素的值,在该程序中用来存储景点编号。
struct node *next;
linkqueuenode;队中的每个结点。
typedef struct
linkqueuenode *front;队头指针。
linkqueuenode *fear;队尾指针。
linkqueue;
int visit[max];用来存储景点是否被访问,访问标做1,未访问标做0
int path[max];用来存储所有访问路径。
int top=-1;/*记录路径的长度*/
int d[max][max],用来比较最短路径,不断刷新数组值。
int q[max][max];用来存储最短路径的邻接矩阵。
五、详细设计及运行结果。
1.各函数之间的调用关系图。
2.各模块流程图。
创建函数。查询所有路径。
查询中转次数最少的路径。
查询带权值最小路径。
程序设计过程及编码。
创建函数。mgraph * creatudn(mgraph *g初始化图形,接受用户输入。
int i,j,k,w;
char v1[20],v2[20];
printf("请输入地图所有景点的数目,以及所有路径的数目:")
scanf("%d %d",&g->vexnum,&g->arcnum);
for (i=1;i<=g->vexnum;ig的初始化邻接矩阵)
for (j=1;j<=g->vexnum;j++)
g->arcs[i][j].adj=infinity;
printf("请输入景点的编号:、名称、简介:");
for(i=1;i<=g->vexnum;i++)
for(i=1;i<=g->vexnum;i++)
for(j=1;j<=g->vexnum;j++)
g->arcs[i][j].adj=infinity;
printf("请输入每条路径长度:");
for(k=1;k<=g->arcnum;k++)
printf("第%d条边:",k);
printf("连接的景点名称为:");
scanf("%s",v1);
scanf("%s",v2);
printf("该路径长度为:");
scanf("%d",&w);
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...
数据结构课程设计报告
河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...