1、 3)任意两个地点之间的所有简单路径。4、增加新地点和路线、撤销旧地点和路线。二、实验内容1. 旅游景点平面图(选取具有代表性的几个地点,用邻接表存储图的信息,用文件存储景点相关信息) 2. 查询相关景点的描述信息,查看景点简介 3. 新增或更改景点描述信息(用不同文件存储不同景点描述信息及景点简介) 4. 创建或新增加景点信息及其文件(用文件存储景点间路径及其路径长度) 5. 确定一个景点,由该景点出发到其他所有可到达景点的最优路径(中转次数最少) 6. 查询任意两景点间的最优路径中转次数最少最少) 7. 查询任意两景点间的最短路径 三、需求分析这个程序功能比较简单,用户打开应用后可实现操作
2、以下功能:1.输出景点平面图;2.查询有关景点的简介;3. 创建景点描述信息文件;4. 查询定点到其他所有景点间的最优路径;5. 查询两景点间的最优路径;6.查询两景点间的最短路径;7. 创建景点及其路径关系的文件。 对于1而言,仅是输出文字信息。功能2 和3,用到了文件的存储与读取,对每个景点均用不同的文件来存储,这样每个景点的描述信息便不受存储容量大小的限制。同样,功能7,用到的还是文件的存储与读取,同样可以增加或删除景点信息,存取信息相对都比较方便。4,5,6这三个功能,说来虽是目标不同,但其编写思想却不尽相同。四、概要设计数据结构说明程序中定义的数据类型结构体(各个成员的作用)type
3、def struct ArcNode int adjvex; /所在数组中位置 AdjType adj; /边的权值 OtherInfo info; /边的其他类型 struct ArcNode *nextarc; /下一个邻接点ArcNode;typedef struct VertexNode VertexData vertexdataM; /顶点数据 char filenameLEN; /顶点的文件名 ArcNode *firstarc; /顶点的第一个邻接点VertexNode;typedef struct VertexNode vertexMAX_VERTEX_NUM; /顶点数组信息
4、 int vernum, arcnum; /顶点数 边数 GraphKind kind; /图的种类AdjList;-对的参数 -typedef struct Qnode int data; struct Qnode *next;LinkQueueNode; LinkQueueNode *rear; LinkQueueNode *front;LinkQueue;- 栈的参数 -typedef struct node struct node *next;LinkList;五、详细设计及运行结果1.各模块流程图, 函数间相互调用关系图: Print_Scenic(AdjList *G)查询景点描述
5、建立景点信息(简介)void Creat_Scenic(AdjList *G)/ void All_Good()一点到其他各点最佳路径(中专次数最少)void Breadth_first_Search(AdjList *G,int v1, int preM)广度优先Search_Good()两景点间的最优路径Shortest_Path()两景点间的最短路径void Shortest_Path_DIJ(AdjList *G, int v1, int preMAX_VERTEX_NUM)2.程序设计过程及编码/-景点描述 void Print_Scenic(AdjList *G) FILE *fp
6、; char strMAX,vM; int m; printf(请输入所要查询的景点名称: ); flushall(); gets(v); m = LocateVex(G,v); strcpy(filename,G-vertexm.filename); fp = fopen(filename,rt if(fp = NULL) printf(n 文件不存在 getch();/ system(cls while(!feof(fp) fscanf(fp,%s,str); puts(str); /-建立景点信息(简介)void Creat_Scenic(AdjList *G) char nameM,s
7、trMAX,m; int i;n请输入要描述的景点名称: gets(name); i = LocateVex(G,name);vertexi.filename);n是否重新介绍(y or n): scanf(%c,&m); if(m=y | m=Y) fp = fopen(filename,wt elsea+ if(fp != NULL)请输入关于%s的描述信息nn,name); system( strcpy(G-vertexi.filename, filename); flushall(); gets(str); fprintf(fp,n%s fclose(fp);n按任意键继续 getch
8、(); /-一点到其他各点最佳路径(中专次数最少)void All_Good() AdjList *G; char v1M; int i,j=1; int preM; G = (AdjList *)malloc(sizeof(AdjList); G = Creat_Link();n起始点到其他各点的最佳路径n请输入要搜索的起始景点名称:,v1); i = LocateVex(G, v1); while(i=-1)起始点错误,按任意键重新输入 gets(v1); i = LocateVex(G,v1); Breadth_first_Search(G,i,pre); for(j=1; jvernu
9、m; j+) if(j!=i) Print_Path(G, i, j, pre);n/-两点间最佳路径(中专次数最少)void Search_Good() char v1M,v2M; int i,j;请输入要搜索的两个景点名称:,v2); j = LocateVex(G, v2); while(i=-1 | j=-1)起始点或终点错误错误,按任意键重新输入请输入起点:请输入终点: gets(v2); j = LocateVex(G,v2); Print_Path(G, i, j, pre);/-两点间最短路径void Shortest_Path() int preMAX_VERTEX_NUM; /将文件读出并存入邻接链表中 gets(v1); gets(v2); ; i = LocateVex(G,v1); /得到起,终点下表 j = LocateVex(G,v2); Shortest_Path_DIJ(G, i,pre); Print_Path(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1