


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安郵電大學数据结构课程设计报告书系部名称计算机学院学生姓名高 丹计算计算机科学与技术技术专 专业名称业班 级科11106学 号04111196指导教师衡衡 霞2012年12月15日 至时间2012年12月21日实验题目延安市旅游导游系统一、实验目的1 加深对数据结构这一课程所学内容的进一步理解与巩固2 通过完成课程设计,逐渐培养自己的编程能力;3 培养给出题目后,构建框架,用计算机解决的能力;4 通过调试程序积累调试C程序设计的经验;二、实验内容编写一个延安市旅游导游系统,其中有平面图,有景点列表,可以查询景 点简介,也可以查询两个景点间的最短路径,中转次数最少路径以及所有路径, 其中要用到
2、数据结构中的图的部分的知识。三、需求分析1. 开发系统功能描述(1) 菜单类函数void Men uShow()主界面菜单函数void Men uShowO()输出延安市旅游景点平面图void Me nuShow1()延安市简介void Men uList()旅游景点列表void S_Me nu()查询菜单(2) 查询两点间最短路径.(权值最小Shortroad(MGraph *G)弗洛伊德法来查询两点间最短路径(3) 查询两点间所有路径Depsearch(MGraph *G,int v,int w)allroads(MGraph *G)利用深度优先遍历图,递归的思想来完成所有路径的查找(4)
3、 .查询中转次数最少的路径int lsEmpty(LinkQueue *Q)判断队是否为空函数int Ini tQueue(Li nkQueue *Q)初始化队列函数int En terQueue(Li nkQueue *Q,i nt x)进队函数int DeleteQueue(LinkQueue *Q,int *x)出队函数 int NextAdjVertex(MGraph *G ,int w,int v)求当前顶点的前一个顶点函数void BFS(MGraph *G,i nt vi,i nt vj)void Reseach(MGraph *G)广度优先遍历图,递归思想完成查询中转次数最少的
4、 功能(5) .确定顶点位置函数int LocateVertex(MGraph * G, char v)确定当前顶点所在矩阵位置函数(6) .查询景点简介函数void Search_K (MGraph * G)按景点名称查询 void Search_N (MGraph * G)按景点编号查询(7) 文件保存以及读出函数in t readn fo(MGraph *G)文件保存函数 int savenfo (MGraph * G)文件读出函数(8) .平面图的创建函数MGraph * CreatUDN(MGraph *G)平面图创建函数,若们有文件,则重新建立文 件并保存(9) 主函数void m
5、a in (void)四、概要设计1、方案设计整个程序要实现的功能是导游功能,平面图如果文件里面有存储的话便从文 件读出,如果没有存储便创建文件存储。其中可以实现的功能为:按景点名称查询,按景点编号查询,查询两点间的 所有路径,查询两点间的最短路径,查询两点间中转次数最少的路径。 按景点名 称查询和按景点编号查询在此不做赘述,重要介绍其他三种查询方式。查询两点间所有路径:该查询方法应用的是深度优先遍历平面图的方法,其中定义两个数组,visit用来标记已遍历过的结点,path用来存储已找到景点的 编号,利用递归的思想一层一层向下遍历,最后打印出path数组便可完成该功能。查询两点间最短路径:该查
6、询方法应用的是弗洛伊德算法,定义的两个二维 数组D和Q,其中Q数组是用来存储查询到最短路径的景点矩阵的,D数组 是用来比较每两个景点之间的权值,每得到一个最小值便将D数组刷新一次,将最后结果存入Q数组。查询两点间中转次数最少的路径:利用广度优先思想遍历平面图。其中应用 的队列的知识。先将最后一个顶点入队,然后利用 NextAdjVertex函数求它的上 一个结点,利用递归思想一直找到最开始的一个结点。景区图:延安市主要景点平面图T北延安杨家岭革命旧址清凉山景区延安大学人民公园 二道街中国抗日军政大学延河大桥百米大道 凤凰山景区宝塔山火车站万花山景区2数据结构说明typedef struct A
7、rCellint adj; /*路径长度*/ArCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;邻接矩阵typedef struct /*图中顶点表示主要景点,存放景点的编号、名称、简介等信息,*/ char nameMAX;景点名称int num;景点编号char in troductio n1000;/* 简介 */in fotype;typedef structin fotype vexsMAX_VERTEX_NUM; 存储景点信息的数组AdjMatrix arcs;存储邻接
8、矩阵的权值in t vex nu m;图中的顶点数int arcnum; /图中的弧数MGraph;/队列的结构体typedef struct Nodeint date;队列元素的值,在该程序中用来存储景点编号struct Node *n ext;Li nkQueueNode;队中的每个结点typedef structLinkQueueNode *front;队头指针Lin kQueueNode *fear;队尾指针Lin kQueue;int visitMAX;用来存储景点是否被访问,访问标做 1,未访问标做0int pathMAX;用来存储所有访问路径int top=-1;/*记录路径的长
9、度*/in t DMAXMAX,用来比较最短路径,不断刷新数组值in t QMAXMAX;用来存储最短路径的邻接矩阵五、详细设计及运行结果1.各函数之间的调用关系图2.各模块流程图创建函数查询所有路径查询中转次数最少的路径查询带权值最小路径程序设计过程及编码创建函数/初始化图形,接受用户输入MGraph * CreatUDN(MGraph *G)int i,j,k,w;char v120,v220;printf("n请输入地图所有景点的数目,以及所有路径的数目:");scanf("%d %d",&G->vex num,&G->
10、arcnum);for (i=1;i<=G->vexnum;i+)/G 的初始化邻接矩阵)for (j=1;j<=G->vex nu m;j+)G->arcsij.adj=INFINITY;printf("n请输入景点的编号:、名称、简介:n");for(i=1;i<=G->vex nu m;i+)printf("n 景点编号:");scan f("%d",&G->vexsi. nu m);printf("n 景点名称:");scan f("%s&q
11、uot;,G->vexsi. name);printf("n 景点简介:");sca nf("%s",G->vexsi.i ntroducti on);for(i=1;i<=G->vex nu m;i+) for(j=1;j<=G->vex nu m;j+)G->arcsij.adj=INFINITY;printf("n请输入每条路径长度:n");for(k=1;k<=G->arc nu m;k+)printf("第%d 条边:n",k);printf(&quo
12、t;n连接的景点名称为:n");sca nf("%s",v1);sca nf("%s",v2);printf("n该路径长度为:n");sca nf("%d",&w);i=LocateVertex(Gv1);j=LocateVertex(Gv2);if(i>=1 &&j>=1)G->arcsij.adj=w;G->arcsji=G->arcsij;return G;查询所有路径Depsearch(MGraph *G,int v,int w)int j,
13、i;top+;pathtop=v;visitv=1;if(v=w)for(i=0;i<=top;i+)prin tf("%s->",G->vexspathi. name);prin tf("bb n");visitv=0;top-;return ;for( j=1;jv=G->vex nu m;j+)if(G->arcsvj.adj<INFINITY && !visitj) Depsearch(Gj,w);visitv=0;top-;allroads(MGraph *G)int v,w,i;char c
14、='y'while(c='y')printf("请输入起始和终点的景点编号<v,w>:"); scan f("%d,%d",&v,&w);top=-1;for(i=0;i<MAX;i+)visiti=0;Depsearch(Gv,w);printf("n是否继续查询最短路径(y/n):"); fflush(stdi n); c=getchar();prin tf("n");查询权值最小路径Shortroad(MGraph *G)n是顶点数,D是权值,
15、Q是最短路径int i,j,k,v,w; char c='y' while(c='y')for(i=1;i<=G->vex nu m;i+) for(j=1;jv=G->vex nu m;j+) if(G->arcsij.adj!=INFINITY) Qij=j;j 是 i 的后继elseQij=0;Dij=G->arcsij.adj;路径长度for(k=1;k<=G->vexnum;k+)做k次迭代,每次均试图将顶点扩充到当前求得的从i至叮的最短路径pij上for(i=1;i<=G->vex nu m;i+
16、) for(j=1;j<=G->vex nu m;j+) if(Dik+Dkj<Dij) Dij=Dik+Dkj; Qij=Qik;修改路径的长度printf("输入起点和终点(v,w):"); sca nf("%d,%d",&v,&w);k=Qvw;/k为起点v的后继顶点if(k=0)prin tf("顶点 %s 到n ",G->vexsv. name,G->vexsw. name);else%s 无路径!printf("顶点 %s 至U终点%s 的最短路径为:n %s&quo
17、t;,G->vexsv. name,G->vexsw. name,G->vexsv. name);while(k!=w)prin tf("->%s",G->vexsk. name);输出后继结点k=Qkw;继续找下一个后继结点printf("->%s",G->);/输出终点 wprintf(" 路径长度:%dn",Dvw);printf("n是否继续查询最短路径(y/n):"); fflush(stdi n);c=getchar(); prin tf(&
18、quot;n");查询中转次数最少路径void BFS(MGraph *G,i nt vi,i nt vj) in t visitedMAX;int i,num;int w;Lin kQueue *Q;int v;Q=(Li nkQueue*)malloc(sizeof(Li nkQueue); if(vi=vj)return;for(i=1;i<=G->vex nu m;i+)visitedi=FALSE;visitedvi=TRUE;Ini tQueue(Q);En terQueue(Q,vi);while(Q->fro nt!=Q->fear)Delet
19、eQueue(Q,&v);num=v;for(i=1;i<=G->vex nu m;i+)if(G->arcsnumi.adj!=INFINITY |G->arcsinum.adj!=INFINITY) w=i;/*求出当前节点的第一个邻接点(求出序号)*/while(w!=-1)if(visitedw=FALSE)if(w=vj) BFS(G,vi, nu m);prin tf("%s->",G->vexs nu m. name); return; visitedw=TRUE; En terQueue(Q,w);w=NextAd
20、jVertex(G ,w,v);W是求的得第一个邻接点,V是相对w下一个邻接点(求出下一个邻接点的序号) break;六、调试情况,设计技巧及体会1 按景点编号查询和按景点名称查询9:101112 "C:ll5erspcDe5ktopgdDebugGuide SYSTEM,exe"籃坐芝区择蔼点 选点点 键旦鲁询询询 莘聲香香_ 请1 :2:3:4:5:万花山冒区 按任意键继续套询蓟所有路径18*少的路径请输入患要查询的景点编号:2以下是薯所查询的信息:“、2;任曲大鉀其行険躺EC2I 回'C:UserspcDesldtopgdDebugGuide SYSTEMex
21、e*12: 万化山景区 按任意键继续询询间一 杳書鬟 食辽口短转 .韓書点 选点占舊两 键<皋询询询查查 一二nr. as Bs w 1 2 3 4 5请输入您要査询的景点名称:火车站以下是您查询的信息: 编号名称11灭车站醜年刚翻修过 焕然一新柝一- 一 _ _1|-火车站-万花山景区-凤JH山景区-二道街->清掠山景叵-:-.延河太桥 .一 塔也7火至站.詔华山量区凤凰山量区7二道街2畅家崂革命旧 訓另勰景区-凤凰山景区-二道街杨家岭革命旧 露山-火车站-万花山晋区-凤凰山員区-二道街-中国抗日军政 卷去道T宝塔山-火车站T万花山景区凤凰山景区二道街沖国抗日军破 景区 菜买道-
22、宝塔山燧车曇万花山景区-凤圍山景区-中国抗日军政大学-二 命旧址-逓谅山繁区延河夫榜.去道宝塔山亠吹车站-万花山号区凤凰山最区T中国抗日军政大学T二-S'C:UserspcDesldtopXgdDebugGuide SYSTEMexe*回3.查询带权值最小路径2.查询所有路径人民公'园-A百举大遵->S 址肓悔山景区-呻国抗 杏民=§->自才一夫專-淫 tit-蓿掠山M区-延河大 梓银誤素大道-隹 人民公园百 木孝磧凉山 AK_->d. f国費日军政人人民公回-百米芙道-宝塔ilj -火车站-万花山星区-凤凰山量区-二道街-清凉山景区- > 库
23、河大标E尿公园-谊米大道-宝垮山-恣车哦-巧舊山景区'凤凰山景区、中国抗日军政夫学T二 家昼革命旧址-灑安夭案清掠山果区三延河大桥膿韻夕百集吴搭彈寵-火车站-万花山景区凤凰山景区中国抗日军政大学-延 人民公园-碍米大道宝塔山T火车站-万花山景区-凤凰山景区-中国抗日军政犬学清 吊山最反-暹河矢桥*C:UserspcDesktopgdDebugXGuide SYSTEM exe'区区 I s i §继 山山山刘普锂 凤宝清百火召按 t »» : 0 1 2 7 8 9 111径路 路的 有少 所最 询询间底 杳香一点 进进丫番 需 选占 泄旦虽忌询询
24、询 WMi査查 请1 :2:3:4:5:弓抗:r 3,国大 =中 S紳至国 於街中 鬣-> 4输顶一是否堆续查询最短路径y/n:4查询中转次数最少的路径占,73:4:G:皿接到达'iiiIt*C:UserspcDesktopXgdDebugXGuide SYSTEM exe'回区区 s 景且遥最继 山山山±1書毬 凤宝清百火冬按 :S : 0 1 2 7 8 9 111请按犍选择:1:转製所有路径 報畐最少的路径<=i-回 ¥C:UserspcDesktopgdDebugGuide SYSTEM.exe*区 - 旦早道_ 山山知站 宀肅百火9:1
25、01112径路有所 询询间赛 杳香点舉 贡t*短转 进进公番 选点占齧戸两 1 2 3 4 5率国续 E中继 抗->键 国街意 到二按 址-> 日址杳一命旧 要吏叩 您塞 入家岭 萌5 5请从杨2、对调试中主要问题进行总结这次程序中遇到的问题也挺多,首先在写所有路径查询时运行不出结果, 加 断点法时有几个数据没有值,后来发现是自己数组的下标有问题,自己写时是从 1开始,而用深度查询时是从0开始的,所以出错了。其次在写广度优先搜索时 没有理解递归出口的条件,所以写出来的是死循环,后来让同学帮忙改正才得以 正确运行,也加深了我对广度优先遍历的理解。第三就是文件存储和读取方面自 己很薄弱
26、,刚开始根本无法下手写,后来把上学期 C语言课本文件部分再认真 看了一遍,也是在同学的帮助下完成了文件的存储和读取, 总之写的是磕磕绊绊, 不过这样也加深的了理解。3、对自己设计进行评价,指出合理和不足之处,提出改进的方案这次设计的导游系统,可以完成老师指定的功能,我觉得其中的两点是深度 优先遍历那里,没有完全按照课本上的编码来写,是根据自己的思路定义了数组, 讲栈的思想用进数组,这样输出时比较容易理解,不足之处就是在编写菜单时有 些疏忽,导致在查询功能完成退出后直接进入主菜单, 而不是查询的子菜单,这 样比较麻烦,而且有点浪费时间,还有就是用邻接矩阵写的图,没法进行插入, 这样就减弱了其实用
27、性。4、在设计过程中的感受刚开始是在不知道怎么开始,只是创建了个图然后就不知道怎么办了, 后来 在网上查询了很多资料,也看了许多别人的代码和思想,才敢对自己的程序下手, 编写过程中也不是一帆风顺的,遇到各种困难, 主要是对课本上的知识了解不够熟悉, 浪费了大量时间去熟悉课本。对知识太过 死板,不会灵活利用。但同时也更好地理解了广度优先和深度优先,刚就到了弗洛伊德算法思想很 精辟。源代码:#defi ne INFINITY 32767#defi ne MAX_VERTEX_NUM 40#defi ne MAX 40#in clude<stdlib.h>#in clude<std
28、io.h>#in clude<c oni o.h>#in clude<stri ng.h>#defi ne FALSE 0#defi ne TRUE 1typedef struct ArCellint adj; /* 路径长度*/ArCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct /*图中顶点表示主要景点,存放景点的编号、名称、简介等信息,*/char nameMAX;int num;char in troductio n1000;/*简介 */in fotype;typedef structin
29、 fotype vexsMAX_VERTEX_NUM;AdjMatrix arcs;in t vex num;/图中的顶点数int arcn um; /图中的弧数MGraph;/队列的结构体typedef struct Nodeint date;struct Node *n ext;Lin kQueueNode;typedef structLin kQueueNode *front;Lin kQueueNode *fear;Lin kQueue;int visitMAX;/*访问标志 */int pathMAX;/*路径 */int top=-1;/*记录路径的长度*/int DMAXMAX,
30、QMAXMAX;void Me nu Show()system("cls");prin tf("n");prin tf("n ”);prin tf("n ”);prin tf("n ”);prin tf("t*欢迎使用延安市主要景点导航系统*n")prin tf("n ”);prin tf("n ”);prin tf("n ”);prin tf("n ”);prin tf("n ”);prin tf("tt请按键选择:n");print
31、f("tt0:进入平面图浏览n");printf("tt1:查看延安市简介n");printf("tt2:查看景点列表 n");printf("tt3:查询功能 n");prin tf("tt4:退出 n");void Men uShowO()system("cls");prin tf("延安市主要景点平面图n");printf("f 北 n");printf("n");printf("延安杨家岭革命旧址p
32、rintf("n");printf("n");printf("n");printf("公园n");printf("n");printf("n");printf("n");printf("n");printf("n");printf("道 n");printf("n");printf("n");printf("n");printf(&quo
33、t;n");延安大学n");清凉山景区 人民二 道 街中国抗日军政大学旧址 延河大桥百米大 凤凰山景区宝塔山prin tf("火车站n");printf(”n");printf("n");prin tf("万 花 山 景 区n");prin tf("tt按任意键返回上一层n");getchar();void Men uShow1()system("cls");prin tf("n ”);prin tf("n ”);prin tf("n
34、”);prin tf("n ”);prin tf("n ”);prin tf("延安古称延州,历来是陕北地区政治、经济、文化和军事中心。n");printf("城区处于宝塔山、清凉山、凤凰山三山鼎峙,延河、汾川河二水交汇之处的位置,成为兵家必争之地,n");printf("有“塞上咽喉”、“军事重镇”之称,被誉为“三秦锁钥,五路襟喉。n");printf("延安之名,始出于隋。延安是国务院首批公布的全国24个历史文化名城之一。n");prin tf("n ”);prin tf(&quo
35、t;n ”);prin tf("n ”);prin tf("n ”);prin tf("n ”);prin tf("tt按任意键返回上一层n");getchar();void Men uList()system("cls"); prin tf("n ”);printf(”市内主要景点列表:n");printf(”1:延安杨家岭革命旧址n");printf(”2:延安大学n");printf(”3:二道街n");printf(”4:人民公园n");printf(&qu
36、ot;5:中国抗日军政大学n “);printf(”6:延河大桥n");printf(”7:凤凰山景区n");printf(”8:宝塔山n");printf(”9:清凉山景区n");printf(”10:百米大道n");printf(”11:火车站n");printf(”12:万花山景区n");prin tf("t按任意键继续n");getchar();void S_Me nu()-prin tf("n ”);prin tf("n");prin tf("n ”);p
37、rin tf("n ”);prin tf("n ”);prin tf("t请按键选择:n");prin tf("t 1:按景点编号进行查询n");prin tf("t 2:按景点名称进行查询n ”);prin tf("t 3:查询任意两个景点间所有路径 n");prin tf("t 4:查询景点间最短路径n");prin tf("t 5:查询两点间中转次数最少的路径n");int lsEmpty(L in kQueue *Q)if(Q->fro nt=Q-&g
38、t;fear)return(1);elsereturn(0);int Ini tQueue(L in kQueue *Q)队的初始化函数的定义Q->fro nt=(Li nkQueueNode *)malloc(sizeof(Li nkQueueNode);if(Q->fro nt!=NULL)Q->fear=Q->fro nt;Q->fro nt-> next=NULL;return(TRUE);elsereturn(FALSE);int En terQueue(L in kQueue *Q,int x)入队函数的定义Lin kQueueNode *New
39、Node;NewNode=(Li nkQueueNode *)malloc(sizeof(Li nkQueueNode);if(NewNode!=NULL)NewNode->date=x;NewNode-> next=NULL;Q->fear- >n ext=NewNode;Q->fear=NewNode;return(TRUE); else return(FALSE);int DeleteQueue(L in kQueue *Q,int *x)出队函数的定义Lin kQueueNode *p;if(Q->fro nt=Q->fear)return(F
40、ALSE);p=Q->fr ont->n ext;Q->front->n ext=p->n ext;if(Q_>fear=p)Q->fear=Q->fro nt;*x=p->date;free(p);return(TRUE);Depsearch(MGraph *G,i nt v,i nt w)int j,i;top+;pathtop=v;visitv=1;if(v=w)for(i=0;i<=top;i+)prin tf("%s->",G->vexspathi. name);printf("bb
41、 n”);visitv=0;top-;return ;for( j=1;j<=G->vex nu m;j+)if(G->arcsvj.adj<INFINITY && !visitj)Depsearch(G,j,w);visitv=0;top-;allroads(MGraph *G)int v,w,i;char c='y'while(c='y')prin tf("请输入起始和终点的景点编号<v,w>:");scan f("%d,%d",&v,&w);top=
42、-1;for(i=0;i<MAX;i+)visiti=O;Depsearch(G,v,w);prin tf("n是否继续查询最短路径(y/n):");fflush(stdi n);c=getchar();prin tf("n ”);Shortroad(MGraph *G) n是顶点数,D是权值,Q是最短路径int i,j,k,v,w; char c='y'while(c='y')for(i=1;i<=G_>vex nu m;i+)for(j=1;j<=G->vex nu m;j+) if(G->a
43、rcsij.adj!=INFINITY)Qij=j;/j是 i 的后继elseQij=0;Dij=G->arcsij.adj; /路径长度k扩充for(k=1;k<=G->vexnum;k+)/做k次迭代,每次均试图将顶点到当前求得的从i至叮的最短路径pij上for(i=1;i<=G->vex nu m;i+)for(j=1;j<=G->vex nu m;j+)if(Dik+Dkj<Dij)Dij=Dik+Dkj;/修改路径的长度Qij=Qik;printf(" 输入起点和终点(v,w):"); scan f("%d
44、,%d", &v,&w);k=Qvw; /k 为起点v的后继顶点 if(k=0)prin tf("顶 点%s 到n",G->vexsv. name,G->vexsw. name);else printf(" 顶点 %s 至U 终点 为:n %s",G->vexsv. name,G->vexsw. name,G->vexsv. name);while(k!=w)prin tf("->%s",G->vexsk. name); /%s 无 路%s 的最短输出后继结点k=Qk
45、w;/继续找下一个后继结点printf("->%s",G->); /输出终点 wprintf(”路径长度:%dn",Dvw);prin tf("n是否继续查询最短路径(y/n):");fflush(stdi n);c=getchar();prin tf("n");int NextAdjVertex(MGraph *G,i nt w,i nt v)int i,j;for(i=w+1;i<G->vex nu m;i+)if(G->arcsvi.adj!=INFINITY)j=i;
46、return(j);return (-1);广度优先遍历*void BFS(MGraph *G,i nt vi,i nt vj) in t visitedMAX;int i,num;int w;Lin kQueue *Q;int v;Q=(L in kQueue*)malloc(sizeof(L in kQueue); if(vi=vj)return;for(i=1;i<=G->vex nu m;i+) visitedi=FALSE;visitedvi=TRUE;Ini tQueue(Q);En terQueue(Q,vi); while(Q->fro nt!=Q->f
47、ear) DeleteQueue(Q,&v);num=v;for(i=1;i<=G->vex nu m;i+)if(G->arcs numi.adj!=INFINITY |G->arcsi num.adj!=INFINITY)w=i; /*求出当前节点的第一个邻接点(求出序号)*/while(w!=-1)if(visitedw=FALSE)if(w=vj)BFS(G,vi, num);prin tf("%s->",G->vexs nu m. name); return;visitedw=TRUE;En terQueue(Q,w);
48、w=NextAdjVertex(G,w,v); /W是求的得第一个邻接点,V是相对w下一个邻接点(求出下一个邻接点的序号) break;/*求任意两个地点之间中转次数最少的路径(广度遍历*/void Reseach(MGraph *G)int vi,vj;prin tf("请输入您要查询的起点编号和终点编号(1-12):n");scan f("%d, %d",&vi,&vj);if(G->arcsvivj.adj!=INFINITY)无需中转,可直接到中转次数最少的路径/求顶点位置函数prin tf("从 %s至 U%s达
49、!n ",G->vexsvi. name,G->vexsvj. name);if(G->arcsvivj.adj=INFINITY)prin tf("从 %s至 U%s为:n ",G->vexsvi. name,G->vexsvj. name);BFS(G,vi,vj);prin tf("%sn",G->vexsvj. name);int LocateVertex(MGraph * G, char v)int j=0,k;for (k=1;k<=G->vex nu m;k+)if (strcmp(
50、G->vexsk. name,v)=0)j=k;break;return (j);void Search_K (MGraph * G)/ 名称查找char n ame10;int i=1;prin tf("n请输入您要查询的景点名称:”);sca nf("%s", name);prin tf("n以下是您查询的信息:n");for (i=1;i<=G->vex nu m;i+)if (strcmp(G->vexsi. name ,n ame)=0)prin tf("编号t名称t简介n");printf
51、(" %dt %st%st",G->vexsi. nu m,G->vexsi. name,G->vexsi.i ntroduct ion);getchar();void Search_N (MGraph * G)/ 编号查找int num=0;prin tf("n请输入您要查询的景点编号:”);scan f("%d", &n um);prin tf("n以下是您所查询的信息:n");prin tf("编号 t名称 tt简介 n");prin tf(" %dt %st%s
52、t",G->vexs num, nu m,G->vexs num, name,G->vexs nu m.i ntroducti on);getchar();int readn fo(MGraph *G)FILE *fp;int i=0,j;if (fp=fopen("E:/旅游图.txt","rt")=NULL)prin tf("n库存文件不存在,请创建 ");return 0;while (!feof(fp)fscan f(fp,"%d",&G->vex nu m);fo
53、r (i=1;i<=G->vex nu m;i+)for (j=1;j<=G->vex nu m;j+)fsca nf(fp,"%d%s%d%d%s",&G->vexsi. num,G->vexsi. name,&G->arcsij.adj,& j,G->vexsi.i ntroduct ion);fclose (fp);return 1;int save_info (MGraph * G)/文件的保存景点信息FILE *fp;int i,j;if (fp=fopen("E:/ 旅游图.txt
54、","wt")=NULL)printf("n读取文件错误.按任意键退出!");return 0;fprin tf(fp,"%dn",G->vex nu m);for (i=1;i<=G->vex nu m;i+)for (j=1;j<=G->vex nu m;j+)%sfprin tf(fp,"%d%s%d%dn ",G->vexsi. nu m,G->vexsi. name,G->arcsij.adj,j,G->vexsi.i ntroducti on)5fclose(fp);return 1;MGraph * CreatUDN(MGraph *G)/初始化图形,接受用户输入int i,j,k,w;char v120,v220;printf("n请输入地图所有景点的数目,以及所有路径的数目:”);scan f("%d %d", &G->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论