1、数据结构课程设计数据结构课程设计校园导游咨询系统校园导游咨询系统 1:需求分析: (1)任务:编制一个为来访客人进行最短路径导游的程序 (2)要求: 从学校的平面上选取 n 个有代表性的景点, 根据用户指定的起点和终点输出相 应路径。 2:概要设计: (1) 1)a) AdjMGraph.h 图操作的函数所放的头文件 b) AdjMGraphCreate.h 图的创建函数所放的头文件 c) Dijkstra.h 狄克斯特拉函数设计所放的头文件 d) SeqList.h 存放顺序表的头文件 2)SchoolGuide.c 文件包括以下三个函数 void SgPrint(AdjMGraph g,i
2、nt n,int distance,int path,int j)函数,其功能 是将源点到各个结点的最短距离和最短路径的结果输出; void Sgblueprint()函数,其功能是将校园平面图输出; void main(void)函数,主函数,功能是调用测试数据值,显示主菜单,根据用户输入 的 i 进行不同功能操作,随后根据用户输入的 ch 值进行不同功能操作。 (2)该程序所使用的存储结构是顺序存储; (3)流程图: 开始 初始化结构体 g 和 rcw,以及 数组 a,distance 和 path int i,j,n=6,e=9 char ch 输入 i 值 输出有关标题和菜单选项的提
3、示信息 调用函数 CreatGraph 3 1 2 T F 图 1-1 主函数 main()流程图 i 清除屏幕 输出是否继续操作的提示信息 调用函数 SgPrint 调用函 Sgblueprint 清除屏幕 输出有关景点代 码问题提示信息 输入 ch 值 ch=y|ch=Y 结束 调用函数 Sgblueprint 输出用户选择起点的提示信息 输入 j 值 调用 Dijkstra N Y N Y N Y Y N 开始 初始化 i 值 输出从源结点到其他各结点的 最短路径及其距离分别为: 输出换行符 isize=0; /*定义初始化数据元素个数*/ int ListLength(SeqList
4、L) /*返回顺序表 L 的当前数据元素个数*/ return L.size; int ListInsert(SeqList *L,int i,DataType x) /*在顺序表 L 的第 i(0isize)个位置前插入数据元素值 x*/ /*插入成功返回 1,插入失败返回 0*/ int j; 输出 g.V ertices.listpathi 输出当前结点 输出右括号 , 其最短距离为最短距离值; 输出换行符 结束 i+ if(L-size=MaxSize) printf(“顺序表已满无法插入!n“); return 0; else if(iL-size) printf(“参数 i 不合法
5、!n“); return 0; else /*为插入做准备*/ for(j=L-size;ji;j-) L-listj=L-listj-1; L-listi=x;/*插入 x*/ L-size+;/*元素个数加 1*/ return 1; int ListDelete(SeqList *L,int i,DataType *x) /*删除顺序表 L 中位置为 i(0isize-1)的数据元素并存放到 x 中*/ /*删除成功返回 1,删除失败返回 0*/ int j; if(L-sizesize-1) printf(“参数 i 不合法“); return 0; else *x=L-listi;
6、/*保存删除的元素到 x 中*/ /*依次前移*/ for(j=i+1;jsize-1;j+) L-listj-1=L-listj; L-size-; return 1; int ListGet(SeqList L,int i,DataType *x) /*取顺序表 L 中第 i 个数据元素存于 x 中,成功返回 1.失败返回 0*/ if(iL.size-1) printf(“参数 i 不合法!n“); return 0; else *x=L.listi; return 1; (2)/* AdjMGraph.h 图操作的函数所放的头文件*/ #include“Seqlist.h“/*包含顺序表头文件*/ typedef struct SeqList Vertices;/*存放结点的顺序表*/ int edgeMaxVerticesMaxV