《数据结构课程设计报告95.pdf》由会员分享,可在线阅读,更多相关《数据结构课程设计报告95.pdf(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 洛 阳 理 工 学 院 课 程 设 计 说 明 书 课程名称 数据结构课程设计 设计课题 校园导游程序 专 业 计算机科学与技术 班 级 学 号 姓 名 完成日期 课 程 设 计 任 务 书 设计题目:校园导游程序 设计内容与要求:问题描述 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。基本要求 (1)查询各景点的相关信息;(2)查询图中任意两个景点间的最短路径。(3)查询图中任意两个景点间的所有路径。(4)增加、删除、更新有关景点和道路的信息。指导教师:
2、2016 年 12 月 20 日 课 程 设 计 评 语 成绩:指导教师:_ 年 月 日 目录 一、问题描述.错误!未定义书签。二、基本要求.错误!未定义书签。三、测试数据.错误!未定义书签。四、算法思想.错误!未定义书签。五、模块划分.错误!未定义书签。应用函数.错误!未定义书签。主函数.错误!未定义书签。查询景点信息函数.错误!未定义书签。查询两景点之间最短路径函数.错误!未定义书签。查询两景点之间所有路径函数.错误!未定义书签。删除已有的顶点和路径.错误!未定义书签。修改已有的顶点和路径.错误!未定义书签。六、数据结构.错误!未定义书签。七、测试.错误!未定义书签。八、心得.错误!未定义
3、书签。九、源程序.错误!未定义书签。一、问题描述 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。二、基本要求(1)查询各景点的相关信息;(2)查询图中任意两个景点间的最短路径。(3)查询图中任意两个景点间的所有路径。(4)增加、删除、更新有关景点和道路的信息。三、测试数据 菜单函数:依次输入:1,2,3,4,5,6,0 分别对应景点信息查询,最短路径查询,所有路径查询,添加景点及路径信息,删除景点及路径信息,修改景点及路径信息,退出。查询景点信息:输入:1,
4、2 分别对应按编号查询,按景点名称查询 按编号查询:输入编号:1 按景点名称查询:输入名称:大明桥 最短路径查询:输入起始景点和终点景点编号:1,7 所有路径查询:输入起始景点和终点景点编号:2,8 添加景点及路径信息:输入新景点序号:9 输入新景点名称:南门 输入新景点相关信息:充满古韵的门,适合拍照 输入到其余各景点的距离:50,100,20 删除景点及路径信息:输入:1,2 分别对应按编号查询,按景点名称查询 按编号查询:输入需要删除的景点编号:8 修改景点及路径信息:输入:1,2 分别对应修改景点信息,修改道路信息 修改景点信息:输入 1,2 分别对应修改景点名称,修改景点描述 修改景
5、点信息:输入修改序号:1 输入修改后的名称:图书馆 123四、算法思想 先利用 CreateUDN 创建初始无向网,通过 main 主函数调用显示,操作功能的选择通过 Menu 函数输出,根据游客需求选择景点信息查询、景点之间最短路径查询、景点之间所有路径查询、添加景点信息、删除景点信息或者修改信息。如果是景点信息查询,在 search 中完成,再调用 SearchMenu 选择是按照景点编号或者景点名称查询,游客输入相应内容。如果是景点之间最短路径查询或是景点之间所有路径查询则游客输入起始景点和结束景点;最短路径是用ShortestPath实现,其中运用了迪杰斯特拉算法;所有路径由Searc
6、hpath1调用 disppath 再调用path,在 path 中通过递归算法实现寻找每一条路并输出。如果是添加景点信息调用 Addnewsight 函数,游客按照提示依次输入信息内容。如果是删除景点信息,选择按照名称删除或是按照序号删除,再调用Deletesight 函数,游客输入相应内容进行删除。如果是修改信息,调用Changesight,Changemenu 两个函数,游客按提示选择修改景点信息或者道路信息,再按提示输入修改后得内容。输出使用调用的相应函数。信息保存于文件中。校园导游图 添加景点和路径 查询所有路径 查询最短路径 修改景点和路径 修改路修改景删除景点和路径 按编号 按名
7、称 查询景点信息 按编号 按名称 修改修改 五、模块划分 应用函数 void CreateUDN(int v,int a);/*造图函数*/void narrate();/*说明函数*/void ShortestPath(int num);/*最短路径函数*/void output(int sight1,int sight2);/*输出函数*/int Menu();/*主菜单*/void search();/*查询景点信息*/int SearchMenu();/*查询子菜单*/void HaMiTonian(int);/*图的遍历*/void Searchpath1(MGraph g);/*查
8、询两个景点间的所有路径*/void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);/*确定路径上第 k+1 个顶点的序号*/void NextValue(int);void display();/*显示遍历结果*/int Addnewsight(int n);/*添加新的景点和路径*/int Deletesight();/*删除景点和路径*/void Changesight();/*修改景点和路径*/int Changemenu();/*修改路径或顶点的选择菜单*/int Sightmenu();/*选
9、择需该景点的菜单*/主函数 1.功能:初始图通过 main 主函数调用显示,操作功能的选择通过 Menu 函数输出,显示为菜单形式提醒用户进行操作,用户选择后在 main 主函数中调用各个函数实现各种功能。2.流程图:604 3 2 1 5 输入相应序号 结束 开始 查询信息 删除信息 所有路径 添加信息 最短路径 修改信息 退出 景点信息和操作目录 查询景点信息函数 1.功能:在 main 主函数中调用 search,打开存储了信息的文件,在显示界面显示已有的景点名称和序号,游客按需求进行序号查询或者名称查询,输入需要查询的序号或者名称后会显示该景点的名称及简介,而后按任意键返回上级菜单选择
10、继续查询或者返回主界面,在查询景点信息函数中实现。2.流程图:no yes 2 1 开始 按编号查询 按景点查询 输入相关信息 是否有此景点 查询两景点之间最短路径函数 1.功能:在 main 函数中调用 narrate 函数,打开存储了信息的文件,游客输入起点编号或者终点编号,利用迪杰斯特拉算法 由 ShortestPath 最短路径函数 选择一条两点之间的最短路径展示给游客,关闭文件。查询两景点之间所有路径函数 1.功能:当游客输入完毕后,根据之前构建的无向图,执行过程为进层和退层两个阶段。首先开始递归进层,考虑使用基于深度优先思想,在搜素过程中,按照景点编号大小依次访问每一个节点,若访问
11、到一个未被访问且有路径相通的点则将其加入数组 P,直到找到目的地,输出第一条路径,然后开始递归退层,按照之前的方式递归访问它的所有未被访问的相邻节点。并通过相应的设置标志visited的方式使最终能不重复地走遍所有的简单路径。最后输出这些路径即可。添加新的顶点和路径 1.功能:在 Addnewsight 添加新的景点和路径函数 中实现,打开存储了信息的文件,输入需要新添加的景点名称,基本信息介绍并依次输入它到原有各景点的距离,将新信息存储到文件中并保存。删除已有的顶点和路径 1.功能:删除不需要的景点信息,并保存删除后的文件,方便下一次浏览。2流程图:2 1 no 是否有此景点 输入需要删除的
12、景点 yes 开始 按景点编号 按景点名称 修改已有的顶点和路径 1.功能:修改有误的景点信息,并保存修改后的文件,方便下一次浏览。2流程图:2 2 1 22 1 开始 修改道路信息 输入相关信息 修改景点信息 输入道路信息 输入景点编号 六、数据结构 MGraph 定义图的类型,其中包含景点,景点之间的距离,景点数和边数。VertexType 是景点的结构体,里面包含了景点编号,景点名称,景点描述。ArcCell是边的结构体,其中包含了边的长度即景点之间的距离。typedef struct ArcCell int adj;/*相邻接的景点之间的路程 */ArcCell;/*定义边的类型*/t
13、ypedef struct VertexType int number;/*景点编号*/char sight100;/*景点名称*/char description1000;/*景点描述*/VertexType;/*定义顶点的类型*/typedef struct VertexType vex20;/*图中的顶点,即为景点*/ArcCell arcs2020;/*图中的边,即为景点间的距离*/int vexnum,arcnum;/*顶点数,边数*/MGraph;/*定义图的类型*/七、测试 .测试数据 输入:根据游客需求选择景点信息查询、景点之间最短路径查询、景点之间所有路径查询、添加景点信息、
14、删除景点信息或者修改信息。如果是景点信息查询,再选择是按照景点编号或者景点名称查询,游客输入相应内容;如果是景点之间最短路径查询或是景点之间所有路径查询则游客输入起始景点和结束景点;如果是添加景点信息则按照提示依次输入信息内容;如果是删除景点信息,选择按照名称删除或是按照序号删除,再输入相应内容进行删除;如果是修改信息,按提示选择修改景点信息或者道路信息,再按提示输入修改后得内容 预期的输出结果:运行程序直接出现各景点及其编号,同时出现操作菜单,其他结果依使用者需求而定,请参见程序后的运行结果。1.菜单函数 2.查询景点信息(按编号)3.查询景点信息(按名称)4.查询两景点之间的最短路径 5.
15、查询两点之间的所有路径 6.添加新的景点及其路径 添加过程 添加后 7.删除景点 删除过程 删除后 8.修改景点信息 修改后 9.文件内容 八、心得 通过对这次对校园导游系统程序编写,我切实体会到了如何编写一个较大的程序。这是我自己相对独立做的最大的一个程序,过程中遇到了各种各样的问题。但同时巩固了课堂上所学的知识,也学到了很多新的东西,也收获了很多。拿到题目,第一步就是构思,分析,创建。题目要求用无向网完成,所以我考虑的是用邻接矩阵存储这个无向网,参考了书上的无向网的邻接矩阵存储程序写了 CreatUDN。查询两个景点之间的最短路径刚开始我参考的是书上的迪杰斯特拉算法,后来发现书上定义的顶点
16、的结构体数组内容太简单,程序考虑的情况也很简单,无法满足我题目的需求,于是我又把迪杰斯特拉算法研读了一遍,自己做了改进。查找所有路径的Searchpath1函数刚开始一直没有写出来,我和同学先在纸上画出顶点,参考深度优先遍历把整个路径走了一遍,但是编程没有什么思路,上网查找了关于这个算法的资料,看到有人说可以考虑用递归实现,就试着用递归实现,同时参照迪杰斯特拉算法用一个数组收集访问过的顶点,还设置了一个标志量标记顶点是否被访问。文件在上学期的课设中我写过,当时学习了一些关于文件的知识,所以运用并没有遇到太多问题,利用文件保存数据,需要fopen打开文件进行读写,还要 fclose函数进行关闭操
17、作,可能还会用到 fread 读取文件。后来知道 a+可以继续录入,于是我通过加入一个 a+形式的语句,实现了可不定时地增加景点数据的功能 所有框架写查找、删除、修改和添加函数本身并不太难,写好以后用 main函数调用可以了。写出框架后,刚开始运行也是没什么问题的,但是多做几步就遇到了问题。在添加的时候,刚开始没有考虑序号,程序自动生成的序号和我想。要的并不是一种,于是我在添加景点里面让游客自己输入序号。后来又发现删除没有考虑找不到需要删除的目标的可能性,用一个判断符 a 来判断是否删除成功。接下来整个运行都没有错但是如果删除两个景点就会出现问题了,试了很久发现是循环条件有问题,虽然固定了景点
18、编号 number,但是循环的 num 和 number 不能对应,于是去询问老师,老师说可以把整个邻接矩阵重新修改或者设置特殊符号控制输出,我选择了相对简便的修改方法。这个程序很长,编写花了很多时间,在程序编写过程中,我不断遇到困难,调试时更是出现了很多问题,一个个的修改,有的花了很长的时间。但我的努力和辛苦没有白费,在老师的指导,同学的帮助,和自己的努力下我终于完成了这个程序。很感谢老师最后的点睛之笔,在我和同学冥思苦想很长时间都没有解决方案的时候是老师帮助我们解决了问题。同时也反映出我思考问题的不全面和经验的欠缺。在程序编写和解决问题时,每一个细节都很重要,既要避免功能的重复也要避免功能
19、疏漏的地方。理论和实践相结合是学好数据结构的关键,这次的课设既培养了我们的自学能力,也提高了我们的学习兴趣。九、源程序#include#include#include#include#define Max 20000 typedef struct ArcCell int adj;/*相邻接的景点之间的路程*/ArcCell;/*定义边的类型*/typedef struct VertexType int number;/*景点编号*/char sight100;/*景点名称*/char description1000;/*景点描述*/VertexType;/*定义顶点的类型*/typedef s
20、truct VertexType vex20;/*图中的顶点,即为景点*/ArcCell arcs2020;/*图中的边,即为景点间的距离*/int vexnum,arcnum;/*顶点数,边数*/MGraph;/*定义图的类型*/FILE*fp,*count;/*变量类型声明,声明 fp 是 FILE 型指针,用于指向 file 类型*/MGraph G;/*把图定义为全局变量*/char nameofschool100;/*学校名称*/int NUM=9;int P2020;/*用来存放图中的边*/int p20;/*全局数组,用来存放路径上的各顶点*/int visited20;/*全局
21、数组,用来记录各顶点被访问的情况*/int a=0;/*全局变量,用来记录每对顶点之间的所有路径的条数*/long int D20;/*辅助变量存储最短路径长度*/void CreateUDN(int v,int a);/*造图函数*/void narrate();/*说明函数*/void ShortestPath(int num);/*最短路径函数*/void output(int sight1,int sight2);/*输出函数*/int Menu();/*主菜单*/void search();/*查询景点信息*/int SearchMenu();/*查询子菜单*/void HaMiTo
22、nian(int);/*图的遍历*/void Searchpath1(MGraph g);/*查询两个景点间的所有路径*/void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);/*确定路径上第 k+1 个顶点的序号*/void NextValue(int);void display();/*显示遍历结果*/int Addnewsight(int n);/*添加新的景点和路径*/int Deletesight();/*删除景点和路径*/void Changesight();/*修改景点和路径*/int
23、Changemenu();/*修改路径或顶点的选择菜单*/int Sightmenu();/*选择需该景点的菜单*/void main()/*主函数*/int v0,v1;int ck;CreateUDN(NUM,11);do ck=Menu();switch(ck)case 1:search();break;case 2:system(cls);narrate();printf(nnttt 请选择起点景点(0%d):,NUM-1);scanf(%d,&v0);printf(ttt 请选择终点景点(0%d):,NUM-1);scanf(%d,&v1);ShortestPath(v0);/*计算
24、两个景点之间的最短路径*/output(v0,v1);/*输出结果*/printf(nntttt 请按任意键继续.n);getchar();getchar();break;case 3:system(cls);narrate();Searchpath1(G);printf(nntttt 请按任意键继续.n);getchar();getchar();break;case 4:system(cls);narrate();NUM=Addnewsight(NUM);system(cls);narrate();break;case 5:NUM=Deletesight();break;case 6:Cha
25、ngesight();break;while(ck!=0);int Menu()/*主菜单*/int c;int flag;do flag=1;system(cls);narrate();printf(ntttn);printf(ttt n);printf(ttt 1、查询景点信息 n);printf(ttt 2、查询两景点间最短路径 n);printf(ttt 3、查询两景点间所有路线 n);printf(ttt 4、添加新的景点和路径 n);printf(ttt 5、删除已有景点和路径 n);printf(ttt 6、修改已有景点或路径 n);printf(ttt 0、退出 n);prin
26、tf(ttt n);printf(tttn);printf(tttt 请输入您的选择:);scanf(%d,&c);if(c=1|c=2|c=3|c=4|c=5|c=6|c=0)flag=0;while(flag);return c;int SearchMenu()/*查询子菜单函数*/int c;int flag;do flag=1;system(cls);narrate();printf(ntttn);printf(ttt n);printf(ttt 1、按照景点编号查询 n);printf(ttt 2、按照景点名称查询 n);printf(ttt 0、返回 n);printf(ttt n
27、);printf(tttn);printf(tttt 请输入您的选择:);scanf(%d,&c);if(c=1|c=2|c=0)flag=0;while(flag);return c;void search()/*查询景点信息函数*/int num;int i;int c;char name20;fp=fopen(,r+);/*读打开原文件*/count=fopen(,r+);/*读写 count 文件*/do system(cls);c=SearchMenu();switch(c)case 1:system(cls);narrate();printf(nntt 请输入您要查找的景点编号:)
28、;scanf(%d,&num);for(i=0;iNUM;i+)if(num=i.number)printf(nnttt 您要查找景点信息如下:);printf(nnttt%s:%-25snn,i.sight,i.description);printf(nttt 按任意键返回.);getchar();getchar();break;if(i=NUM)printf(nnttt 没有找到!);printf(nnttt 按任意键返回.);getchar();getchar();break;case 2:system(cls);narrate();printf(nntt 请输入您要查找的景点名称:);
29、scanf(%s,name);for(i=0;iNUM;i+)if(!strcmp(name,i.sight)printf(nnttt 您要查找景点信息如下:);printf(nnttt%s:%-25snn,i.sight,i.description);printf(nttt 按任意键返回.);getchar();getchar();break;if(i=NUM)printf(nnttt 没有找到!);printf(nnttt 按任意键返回.);getchar();getchar();break;while(c!=0);fwrite(&G,sizeof(MGraph),1,fp);/*保存到文
30、件中*/fclose(fp);fprintf(count,%d,NUM);fclose(count);void CreateUDN(int v,int a)/*创建初始图函数*/int i,j;if(fp=fopen(,a+)=NULL)umber=i;/*初始化每一个景点的编号*/*初始化每一个景点名及其景点描述*/strcpy0.sight,大明桥);strcpy0.description,落于小河上,风景优美);strcpy1.sight,图书馆);strcpy1.description,环境优雅,充满书香气息,呈环形);strcpy2.sight,教学楼);strcpy2.descri
31、ption,上课和自习的地方,临近图书馆);strcpy3.sight,子衿餐厅);strcpy3.description,一餐厅,新装修过的餐厅,临近实验楼,是男女比例最适中的餐厅);strcpy4.sight,实验 A 楼);strcpy4.description,老师办公室);strcpy5.sight,实验 B 楼);strcpy5.description,计算机机房);strcpy6.sight,实验 C 楼);strcpy6.description,电气实验楼);strcpy7.sight,璞院餐厅);strcpy7.description,第二餐厅,临近男生宿舍,食物种类比较多)
32、;strcpy8.sight,琇院餐厅);strcpy8.description,第三餐厅,临近女生宿舍楼,比较便宜);/*这里把所有的边假定为 20000,含义是这两个景点之间是不可到达,极大值*/for(i=0;i20;+i)for(j=0;j20;+j)ij.adj=Max;/*下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,所以要对图中对称的边同时赋值。*/01.adj=10.adj=50;13.adj=31.adj=70;06.adj=60.adj=250;14.adj=41.adj=80;24.adj=42.adj=100;35.adj=53.adj=90;52.adj
33、=25.adj=100;46.adj=64.adj=75;47.adj=74.adj=300;27.adj=72.adj=400;78.adj=87.adj=40;fwrite(&G,sizeof(MGraph),1,fp);umber!=-1)printf(tttt%c(%2d)%-10s%cn,3,i.number,i.sight,3);/*输出景点列表*/printf(ttt_n);void ShortestPath(int num)/*迪杰斯特拉算法最短路径函数 num 为入口点的编号*/int v,w,i,t;/*i、w 和 v 为计数辅助变量*/int final20;/*辅助数组
34、*/int min;fp=fopen(,r+);dj;/*将与之相关的权值放入 D 中存放*/for(w=0;wNUM;w+)/*设置为空路径*/Pvw=0;if(Dv20000)/*存在路径*/Pvnum=1;/*存在标志置为 1*/Pvv=1;/*自身到自身*/Dnum=0;finalnum=1;/*初始化 num 顶点属于 S 集合*/*开始主循环,每一次求得 num 到某个顶点的最短路径,并将其加入到 S 集合*/for(i=0;iNUM;+i)/*其余个顶点*/min=Max;/*当前所知离顶点 num 的最近距离*/for(w=0;wNUM;+w)if(!finalw)/*w 顶点
35、在 v-s 中*/if(Dwmin)/*w 顶点离 num 顶点更近*/v=w;min=Dw;finalv=1;/*离 num 顶点更近的 v 加入到 s 集合*/for(w=0;wNUM;+w)/*更新当前最短路径极其距离*/if(!finalw&(min+vw.adj)Dw)/*不在 s 集合,并且比以前所找到的路径都短就更新当前路径*/Dw=min+vw.adj;for(t=0;tNUM;t+)Pwt=Pvt;Pww=1;fwrite(&G,sizeof(MGraph),1,fp);.*/printf(nt从%s到%s的最短路径是,sight1.sight,sight2.sight);/
36、*输出提示信息*/printf(t(最短距离为%dm.)nnt,Da);/*输出sight1到sight2的最短路径长度,存放在 D数组中*/printf(t%s,sight1.sight);/*输出景点一的名称*/d=sight1;/*将景点一的编号赋值给 d*/for(c=0;cNUM;+c)gate:;/*标号,可以作为 goto 语句跳转的位置*/Pasight1=0;for(b=0;bNUM;b+)ifdb.adj%s,b.sight);/*输出此节点的名称*/q=q+1;/*计数变量加一,满 8 控制输出时的换行*/Pab=0;d=b;/*将 b 作为出发点进行下一次循环输出,如此
37、反复*/if(q%8=0)printf(n);goto gate;/*从当前位置出发*/void Searchpath1(MGraph g)/*查询两个景点间的所有路径*/int l=0;int k=0;int i,j;fp=fopen(,r+);umber)i=k;/*在网中找到其编号与输入的出发景点的编号相同的顶点*/for(;l);ight;printf(%sn,ps.sight);s=0;dj!=Max&visiteds=0)/*当 vk 与 vs 之间有边存在且 vs 未被访问过*/visiteds=1;/*置访问标志位为 1,即已访问的*/pk+1=s;/*将顶点 s 加入到 p
38、数组中*/path(g,i,j,k+1);/*递归调用之*/visiteds=0;/*重置访问标志位为 0,即未访问的,以便该顶点能被重新使用*/s+;int Addnewsight(int n)umber=b;strcpyn.sight,sight);strcpyn.description,description);for(i=0;in;i+)system(cls);narrate();printf(请输入此景点到第%d 个景点的距离(单位:m)(同一景点或不可到达用 20000 表示,极大值):n,i);scanf(%d,&length);if(length!=20000);+;ni.ad
39、j=in.adj=length;NUM+;n+;+;fwrite(&G,sizeof(MGraph),1,fp);umber)dj!=20000);dj=ji.adj=20000;umber=-1;ight,*);strcmpnum.description,+);if(a=1)printf(nttt 删除成功!按任意键返回.);getchar();getchar();if(a=0)printf(该编号不存在!);getchar();getchar();break;case 2:system(cls);narrate();printf(nntt 请输入您要删除景点的名称:);scanf(%s,n
40、ame);for(i=0;iNUM;i+)if(!strcmp(name,i.sight)a=1;num=i;for(j=0;jNUM;j+)ifij.adj!=20000);ij.adj=ji.adj=20000;num.number=-1;ight,*);strcmpnum.description,+);if(a=1)printf(删除成功!);printf(nttt 按任意键返回.);getchar();getchar();if(a=0)printf(nnttt 没有找到!);printf(nnttt 按任意键返回.);getchar();getchar();break;fwrite(&
41、G,sizeof(MGraph),1,fp);umber=num)q=Sightmenu();if(q=1)printf(请输入修改后的景点名称:n);scanf(%s,&sight);strcpyi.sight,sight);printf(tttt 修改成功!n);else if(q=2)printf(请输入修改后的景点信息:n);scanf(%s,&description);strcpyi.description,description);printf(tttt 修改成功!n);else if(q=0)p=Changemenu();printf(ntt 按任意键返回.);getchar()
42、;getchar();break;if(i=NUM)printf(nntttt 没有找到!);printf(nnttt 按任意键返回.);getchar();getchar();break;case 2:printf(tt 请输入道路一侧的景点序号:);scanf(%d,&a);printf(tt 请输入道路另一侧的景点序号:);scanf(%d,&b);printf(tt 请输入修改后的道路长度:);scanf(%d,&length);ab.adj=ba.adj=length;printf(tttt 修改成功!n);printf(tt);getchar();system(PAUSE);break;fwrite(&G,sizeof(MGraph),1,fp);/保存到文件中 fclose(fp);fprintf(count,%d,NUM);fclose(count);