数据结构课程设计报告55405_第1页
数据结构课程设计报告55405_第2页
数据结构课程设计报告55405_第3页
数据结构课程设计报告55405_第4页
数据结构课程设计报告55405_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

))))))))西安郵電大學数据结构课程设计报告书系部名称 计算机学院学生姓名 高 丹计算计算机科学与技术 技术专专业名称业班 级 科11106学 号 04111196指导教师 衡衡 霞2012年12月15日 至时 间2012年12月21日))))))))))))))实验题目 延安市旅游导游系统一、实验目的1.加深对《数据结构》这一课程所学内容的进一步理解与巩固2.通过完成课程设计,逐渐培养自己的编程能力;3.培养给出题目后,构建框架,用计算机解决的能力;4.通过调试程序积累调试 C程序设计的经验;二、实验内容编写一个延安市旅游导游系统,其中有平面图,有景点列表,可以查询景点简介,也可以查询两个景点间的最短路径,中转次数最少路径以及所有路径,其中要用到数据结构中的图的部分的知识。三、需求分析开发系统功能描述(1)菜单类函数voidMenuShow()主界面菜单函数voidMenuShow0()输出延安市旅游景点平面图voidMenuShow1()延安市简介voidMenuList()旅游景点列表voidS_Menu()查询菜单2)查询两点间最短路径.(权值最小)Shortroad(MGraph*G)弗洛伊德法来查询两点间最短路径3)查询两点间所有路径Depsearch(MGraph *G,intv,intw)allroads(MGraph*G)利用深度优先遍历图,递归的思想来完成所有路径的查找(4).查询中转次数最少的路径intIsEmpty(LinkQueue*Q)判断队是否为空函数intInitQueue(LinkQueue*Q)初始化队列函数intEnterQueue(LinkQueue*Q,intx)进队函数intDeleteQueue(LinkQueue*Q,int*x)出队函数intNextAdjVertex(MGraph*G,intw,intv)求当前顶点的前一个顶点函数voidBFS(MGraph*G,intvi,intvj)voidReseach(MGraph*G)广度优先遍历图,递归思想完成查询中转次数最少的功能(5).确定顶点位置函数intLocateVertex(MGraph*G,charv[])确定当前顶点所在矩阵位置函数(6).查询景点简介函数))))))))))))))voidSearch_K(MGraph*G)按景点名称查询voidSearch_N(MGraph*G)按景点编号查询(7).文件保存以及读出函数intread_info(MGraph*G)文件保存函数intsave_info(MGraph*G)文件读出函数(8).平面图的创建函数MGraph*CreatUDN(MGraph*G)平面图创建函数,若们有文件,则重新建立文件并保存(9).主函数voidmain(void)四、概要设计1、方案设计整个程序要实现的功能是导游功能,平面图如果文件里面有存储的话便从文件读出,如果没有存储便创建文件存储。其中可以实现的功能为:按景点名称查询,按景点编号查询,查询两点间的所有路径,查询两点间的最短路径,查询两点间中转次数最少的路径。按景点名称查询和按景点编号查询在此不做赘述,重要介绍其他三种查询方式。查询两点间所有路径:该查询方法应用的是深度优先遍历平面图的方法,其中定义两个数组,visit[]用来标记已遍历过的结点,path[]用来存储已找到景点的编号,利用递归的思想一层一层向下遍历,最后打印出path[]数组便可完成该功能。查询两点间最短路径:该查询方法应用的是弗洛伊德算法,定义的两个二维数组D[][]和Q[][],其中Q数组是用来存储查询到最短路径的景点矩阵的,D数组是用来比较每两个景点之间的权值,每得到一个最小值便将D数组刷新一次,将最后结果存入Q数组。查询两点间中转次数最少的路径: 利用广度优先思想遍历平面图。 其中应用的队列的知识。先将最后一个顶点入队,然后利用 NextAdjVertex函数求它的上一个结点,利用递归思想一直找到最开始的一个结点。景区图:延安市主要景点平面图↑北延安杨家岭革命旧址 延安大学清凉山景区人民公园二道街中国抗日军政大学延河大桥百米大道凤凰山景区宝塔山))))))))))))))火车站万花山景区2.数据结构说明typedefstructArCell{intadj;/*路径长度 */}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; 邻接矩阵typedefstruct/*图中顶点表示主要景点,存放景点的编号、名称、简介等信息,*/{charname[MAX]; 景点名称intnum;景点编号charintroduction[1000];/*简介*/}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];存储景点信息的数组AdjMatrixarcs;存储邻接矩阵的权值intvexnum;//图中的顶点数intarcnum;//图中的弧数}MGraph;//队列的结构体typedefstructNode{intdate;队列元素的值,在该程序中用来存储景点编号structNode*next;}LinkQueueNode;队中的每个结点typedefstruct{LinkQueueNode*front;队头指针LinkQueueNode*fear;队尾指针}LinkQueue;intvisit[MAX];用来存储景点是否被访问,访问标做1,未访问标做0intpath[MAX];用来存储所有访问路径inttop=-1;/*记录路径的长度*/intD[MAX][MAX],用来比较最短路径,不断刷新数组值intQ[MAX][MAX];用来存储最短路径的邻接矩阵五、详细设计及运行结果1.各函数之间的调用关系图))))))))))))))主菜单平面图浏延安市简景点列表查询功能览介MenuList()菜单MenuShoMenuShoS_Menu()w0()w1()按景点编号查询按景点名称查询查询功能查询两点间所有路径菜单S_Menu()查询两点间最短路径查询两点间中转次数最少路径

voidSearch_N(MGraph *G)LocateVertex(MGraph*G,charv[])voidSearch_K(MGraph*G)Depsearch(MGraph *G,intv,intw)allroads(MGraph*G)Shortroad(MGraph *G)NextAdjVertex(MGraph*G,intw,intv)BFS(MGraph*G,intvi,intvj)Reseach(MGraph*G)2.各模块流程图创建函数))))))))))))))开 始是否存在文件是否read_info(MGraphCreatUDN(MGraph*G)save_info(MGraph*G)结 束查询所有路径))))))))))))))Depsearch(G,j,w);Nv==wPath[i]visit[v]=1G->arcs[v][j].adj<INFINITY&&!visit[j]Depsearch(G,j,w);Yi<G->vexnum结束查询中转次数最少的路径))))))))))))))开始广度遍历图求出 中转最少的路径输入vi,vjNvi,vj合理Y权值小于无穷YN vi,vj直接到达Yvi==vjN递归调用 BFS输出中转最少的路径结束查询带权值最小路径))))))))))))))开始初始化D[i][j],Q[i][j]用弗洛伊德算法计算最小路径输入vi,vjNvi,vj合理YDt[i][k]+D[k][j]<D[i][j]YD[i][j]=D[i][k]+D[k][j];NQ[i][j]=Q[j][i]输出最短路径结束程序设计过程及编码创建函数MGraph*CreatUDN(MGraph*G) //初始化图形,接受用户输入{))))))))))))))inti,j,k,w;charv1[20],v2[20];printf("\n请输入地图所有景点的数目,以及所有路径的数目:");scanf("%d%d",&G->vexnum,&G->arcnum);for(i=1;i<=G->vexnum;i++) //G的初始化邻接矩阵)for(j=1;j<=G->vexnum;j++)G->arcs[i][j].adj=INFINITY;printf("\n请输入景点的编号:、名称、简介:\n");for(i=1;i<=G->vexnum;i++){printf("\n景点编号:");scanf("%d",&G->vexs[i].num);printf("\n景点名称:");scanf("%s",G->vexs[i].name);printf("\n景点简介:");scanf("%s",G->vexs[i].introduction);}for(i=1;i<=G->vexnum;i++)for(j=1;j<=G->vexnum;j++)G->arcs[i][j].adj=INFINITY;printf("\n请输入每条路径长度:\n");for(k=1;k<=G->arcnum;k++){printf("第%d条边:\n",k);printf("\n连接的景点名称为:\n");scanf("%s",v1);scanf("%s",v2);printf("\n该路径长度为:\n");scanf("%d",&w);i=LocateVertex(G,v1);j=LocateVertex(G,v2);if(i>=1&&j>=1){G->arcs[i][j].adj=w;G->arcs[j][i]=G->arcs[i][j];}}returnG;}查询所有路径Depsearch(MGraph *G,intv,intw){intj,i;))))))))))))))top++;path[top]=v;visit[v]=1;if(v==w){for(i=0;i<=top;i++)printf("%s->",G->vexs[path[i]].name);printf("\b\b \n");visit[v]=0;top--;return;}for(j=1;j<=G->vexnum;j++){if(G->arcs[v][j].adj<INFINITY&&!visit[j])Depsearch(G,j,w);}visit[v]=0;top--;}allroads(MGraph*G){intv,w,i;charc='y';while(c=='y'){printf("请输入起始和终点的景点编号 <v,w>:");scanf("%d,%d",&v,&w);top=-1;for(i=0;i<MAX;i++)visit[i]=0;Depsearch(G,v,w);printf("\n是否继续查询最短路径(y/n):");fflush(stdin);c=getchar();printf("\n");}}查询权值最小路径Shortroad(MGraph *G) //n是顶点数,D[]是权值,Q[]是最短路径{inti,j,k,v,w;charc='y';while(c=='y'))))))))))))))){for(i=1;i<=G->vexnum;i++)for(j=1;j<=G->vexnum;j++){if(G->arcs[i][j].adj!=INFINITY)Q[i][j]=j; //j是i的后继elseQ[i][j]=0;D[i][j]=G->arcs[i][j].adj; //路径长度}for(k=1;k<=G->vexnum;k++)//做k次迭代,每次均试图将顶点k扩充到当前求得的从i到j的最短路径pij上{for(i=1;i<=G->vexnum;i++)for(j=1;j<=G->vexnum;j++){if(D[i][k]+D[k][j]<D[i][j]){D[i][j]=D[i][k]+D[k][j]; //修改路径的长度Q[i][j]=Q[i][k];}}}printf("输入起点和终点(v,w):");scanf("%d,%d",&v,&w);k=Q[v][w]; //k为起点v的后继顶点if(k==0)printf(" 顶 点 %s 到 %s 无 路 径 !\n",G->vexs[v].name,G->vexs[w].name);else{printf(" 顶 点 %s 到 终 点 %s 的 最 短 路 径为:\n%s",G->vexs[v].name,G->vexs[w].name,G->vexs[v].name);while(k!=w){printf("->%s",G->vexs[k].name); //输出后继结点k=Q[k][w]; //继续找下一个后继结点}printf("->%s",G->vexs[w].name);//输出终点wprintf("路径长度:%d\n",D[v][w]);}printf("\n是否继续查询最短路径 (y/n):");fflush(stdin);))))))))))))))c=getchar();printf("\n");}}查询中转次数最少路径voidBFS(MGraph*G,intvi,intvj){intvisited[MAX];inti,num;int w;LinkQueue*Q;intv;Q=(LinkQueue*)malloc(sizeof(LinkQueue));if(vi==vj)return;for(i=1;i<=G->vexnum;i++)visited[i]=FALSE;visited[vi]=TRUE;InitQueue(Q);EnterQueue(Q,vi);while(Q->front!=Q->fear){DeleteQueue(Q,&v);num=v;for(i=1;i<=G->vexnum;i++){if(G->arcs[num][i].adj!=INFINITY||G->arcs[i][num].adj!=INFINITY){w=i; /*求出当前节点的第一个邻接点(求出序号) */while(w!=-1){if(visited[w]==FALSE){if(w==vj){BFS(G,vi,num);printf("%s->",G->vexs[num].name);return;}visited[w]=TRUE;EnterQueue(Q,w);}w=NextAdjVertex(G,w,v); //W是求的得第一个邻接点,))))))))))))))V是相对w下一个邻接点 (求出下一个邻接点的序号 )}break;}}}}六、调试情况,设计技巧及体会1.按景点编号查询和按景点名称查询))))))))))))))2.查询所有路径3.查询带权值最小路径))))))))))))))4.查询中转次数最少的路径))))))))))))))2、对调试中主要问题进行总结这次程序中遇到的问题也挺多,首先在写所有路径查询时运行不出结果,加断点法时有几个数据没有值,后来发现是自己数组的下标有问题,自己写时是从1开始,而用深度查询时是从0开始的,所以出错了。其次在写广度优先搜索时没有理解递归出口的条件,所以写出来的是死循环,后来让同学帮忙改正才得以正确运行,也加深了我对广度优先遍历的理解。第三就是文件存储和读取方面自己很薄弱,刚开始根本无法下手写,后来把上学期C语言课本文件部分再认真看了一遍,也是在同学的帮助下完成了文件的存储和读取,总之写的是磕磕绊绊,不过这样也加深的了理解。3、对自己设计进行评价,指出合理和不足之处,提出改进的方案这次设计的导游系统,可以完成老师指定的功能,我觉得其中的两点是深度优先遍历那里,没有完全按照课本上的编码来写,是根据自己的思路定义了数组,讲栈的思想用进数组,这样输出时比较容易理解,不足之处就是在编写菜单时有些疏忽,导致在查询功能完成退出后直接进入主菜单,而不是查询的子菜单,这样比较麻烦,而且有点浪费时间,还有就是用邻接矩阵写的图,没法进行插入,这样就减弱了其实用性。4、在设计过程中的感受刚开始是在不知道怎么开始,只是创建了个图然后就不知道怎么办了,后来在网上查询了很多资料,也看了许多别人的代码和思想,才敢对自己的程序下手,编写过程中也不是一帆风顺的,遇到各种困难,主要是对课本上的知识了解不够熟悉,浪费了大量时间去熟悉课本。对知识太过死板,不会灵活利用。但同时也更好地理解了广度优先和深度优先,刚就到了弗洛伊德算法思想很精辟。源代码:))))))))))))))#defineINFINITY32767#defineMAX_VERTEX_NUM40#defineMAX40#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<string.h>#defineFALSE0#defineTRUE1typedefstructArCell{intadj;/* 路径长度 */}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct/* 图中顶点表示主要景点 ,存放景点的编号、名称、简介等信息 ,*/{charname[MAX];intnum;charintroduction[1000];/* 简介*/}infotype;typedefstruct{infotypevexs[MAX_VERTEX_NUM];AdjMatrixarcs;intvexnum;// 图中的顶点数intarcnum;// 图中的弧数}MGraph;队列的结构体typedefstructNode{intdate;structNode*next;}LinkQueueNode;typedefstruct{LinkQueueNode*front;LinkQueueNode*fear;}LinkQueue;intvisit[MAX]; /* 访问标志*/intpath[MAX]; /* 路径*/inttop=-1;/* 记录路径的长度 */intD[MAX][MAX],Q[MAX][MAX];voidMenuShow(){system("cls");printf("\n");printf("\n");printf("\n");printf("\n");printf("\t****************** 欢迎 使 用 延安 市 主要景 点 导航 系 统))))))))))))))******************\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\t\t请按键选择:\n");printf("\t\t0:进入平面图浏览\n");printf("\t\t1:查看延安市简介\n");printf("\t\t2:查看景点列表\n");printf("\t\t3:查询功能\n");printf("\t\t4:退出\n");}voidMenuShow0(){system("cls");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("延河大桥\n");printf("百米大道\n");printf("\n");printf("凤凰山景区\n");printf("宝塔山\n");printf("\n");))))))))))))))printf(" 火 车 站\n");printf("\n");printf("\n");printf(" 万 花 山 景 区\n");printf("\t\t 按任意键返回上一层 \n");getchar();}voidMenuShow1(){system("cls");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("延安古称延州,历来是陕北地区政治、经济、文化和军事中心。\n");printf("城区处于宝塔山、清凉山、凤凰山三山鼎峙,延河、汾川河二水交汇之处的位置,成为兵家必争之地,\n");printf("有“塞上咽喉”、“军事重镇”之称,被誉为“三秦锁钥,五路襟喉。\n");printf("延安之名,始出于隋。延安是国务院首批公布的全国24个历史文化名城之一。\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\t\t按任意键返回上一层\n");getchar();}voidMenuList(){system("cls");printf("\n");printf("市内主要景点列表:\n");printf("1:延安杨家岭革命旧址\n");printf("2:延安大学\n");printf("3:二道街\n");printf("4:人民公园\n");printf("5:中国抗日军政大学\n");printf("6:延河大桥\n");printf("7:凤凰山景区\n");printf("8:宝塔山\n");printf("9:清凉山景区\n");printf("10:百米大道\n");printf("11:火车站\n");printf("12:万花山景区\n");printf("\t按任意键继续\n");))))))))))))))getchar();}voidS_Menu(){printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\t请按键选择:\n");printf("\t1:按景点编号进行查询\n");printf("\t2:按景点名称进行查询\n");printf("\t3:查询任意两个景点间所有路径\n");printf("\t4:查询景点间最短路径\n");printf("\t5:查询两点间中转次数最少的路径\n");}intIsEmpty(LinkQueue*Q){if(Q->front==Q->fear)return(1);elsereturn(0);}intInitQueue(LinkQueue*Q)// 队的初始化函数的定义{Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));if(Q->front!=NULL){Q->fear=Q->front;Q->front->next=NULL;return(TRUE);}else{return(FALSE);}}intEnterQueue(LinkQueue*Q,intx)// 入队函数的定义{LinkQueueNode*NewNode;NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));if(NewNode!=NULL){NewNode->date=x;NewNode->next=NULL;Q->fear->next=NewNode;Q->fear=NewNode;return(TRUE);}else)))))))))))))){return(FALSE);}}intDeleteQueue(LinkQueue*Q,int*x)// 出队函数的定义{LinkQueueNode*p;if(Q->front==Q->fear)return(FALSE);p=Q->front->next;Q->front->next=p->next;if(Q->fear==p)Q->fear=Q->front;*x=p->date;free(p);return(TRUE);}Depsearch(MGraph*G,intv,intw){intj,i;top++;path[top]=v;visit[v]=1;if(v==w){for(i=0;i<=top;i++)printf("%s->",G->vexs[path[i]].name);printf("\b\b\n");visit[v]=0;top--;return;}for(j=1;j<=G->vexnum;j++){if(G->arcs[v][j].adj<INFINITY&&!visit[j])Depsearch(G,j,w);}visit[v]=0;top--;}allroads(MGraph*G){intv,w,i;charc='y';while(c=='y'){printf(" 请输入起始和终点的景点编号 <v,w>:");scanf("%d,%d",&v,&w);top=-1;for(i=0;i<MAX;i++)))))))))))))))visit[i]=0;Depsearch(G,v,w);printf("\n 是否继续查询最短路径 (y/n):");fflush(stdin);c=getchar();printf("\n");}}Shortroad(MGraph*G) //n 是顶点数,D[]是权值,Q[]是最短路径{inti,j,k,v,w;charc='y';while(c=='y'){for(i=1;i<=G->vexnum;i++)for(j=1;j<=G->vexnum;j++){if(G->arcs[i][j].adj!=INFINITY)Q[i][j]=j; //j 是i的后继elseQ[i][j]=0;D[i][j]=G->arcs[i][j].adj; // 路径长度}for(k=1;k<=G->vexnum;k++) //做k次迭代,每次均试图将顶点 k扩充到当前求得的从 i到j的最短路径 pij 上{for(i=1;i<=G->vexnum;i++)for(j=1;j<=G->vexnum;j++){if(D[i][k]+D[k][j]<D[i][j]){D[i][j]=D[i][k]+D[k][j]; // 修改路径的长度Q[i][j]=Q[i][k];}}}printf(" 输入起点和终点 (v,w):");scanf("%d,%d",&v,&w);k=Q[v][w]; //k 为起点v的后继顶点if(k==0)printf(" 顶 点 %s 到 %s 无 路 径 !\n",G->vexs[v].name,G->vexs[w].name);else{printf(" 顶 点 %s 到 终 点 %s 的 最 短 路 径为:\n%s",G->vexs[v].name,G->vexs[w].name,G->vexs[v].name);while(k!=w){printf("->%s",G->vexs[k].name); // 输出后继结点k=Q[k][w]; // 继续找下一个后继结点))))))))))))))}printf("->%s",G->vexs[w].name); // 输出终点 wprintf(" 路径长度:%d\n",D[v][w]);}printf("\n 是否继续查询最短路径 (y/n):");fflush(stdin);c=getchar();printf("\n");}}intNextAdjVertex(MGraph*G,intw,intv){inti,j;for(i=w+1;i<G->vexnum;i++){if(G->arcs[v][i].adj!=INFINITY){j=i;return(j);}}return(-1);}/************* 广度优先遍历 *************/voidBFS(MGraph*G,intvi,intvj){intvisited[MAX];inti,num;intw;LinkQueue*Q;intv;Q=(LinkQueue*)malloc(sizeof(LinkQueue));if(vi==vj)return;for(i=1;i<=G->vexnum;i++)visited[i]=FALSE;visited[vi]=TRUE;InitQueue(Q);EnterQueue(Q,vi);while(Q->front!=Q->fear){DeleteQueue(Q,&v);num=v;for(i=1;i<=G->vexnum;i++){if(G->arcs[num][i].adj!=INFINITY||G->arcs[i][num].adj!=INFINITY){w=i; /* 求出当前节点的第一个邻接点(求出序号) */while(w!=-1){if(visited[w]==FALSE))))))))))))))){if(w==vj){BFS(G,vi,num);printf("%s->",G->vexs[num].name);return;}visited[w]=TRUE;EnterQueue(Q,w);}w=NextAdjVertex(G,w,v); //W 是求的得第一个邻接点, V是相对w下一个邻接点(求出下一个邻接点的序号)}break;}}}}/******************* 求任意两个地点之间中转次数最少的路径(广度遍历图)************/voidReseach(MGraph*G){intvi,vj;printf("请输入您要查询的起点编号和终点编号(1-12):\n");scanf("%d,%d",&vi,&vj);if(G->arcs[vi][vj].adj!=INFINITY)printf(" 从 %s 到 %s 无 需 中 转 , 可 直 接 到达!\n",G->vexs[vi].name,G->vexs[vj].name);if(G->arcs[vi][vj].adj==INFINITY){printf(" 从 %s 到 %s 中 转 次 数 最 少 的 路 径为:\n",G->vexs[vi].name,G->vexs[vj].name);BFS(G,vi,vj);printf("%s\n",G->vexs[vj].name);}}intLocateVertex(MGraph*G,charv[]) //求顶点位置函数{intj=0,k;for(k=1;k<=G->vexnum;k++)if(strcmp(G->vexs[k].name,v)==0){j=k;break;}return(j);}))))))))))))))voidSearch_K(MGraph*G) //名称查找{charname[10];inti=1;printf("\n 请输入您要查询的景点名称 :");scanf("%s",name);printf("\n 以下是您查询的信息 :\n");for(i=1;i<=G->vexnum;i++){if(strcmp(G->vexs[i].name,name)==0){printf(" 编号\t 名称\t 简介\n");printf(" %d\t %s\t %s\t",G->vexs[i].num,G->vexs[i].name,G->vexs[i].introduction);}}getchar();}voidSearch_N(MGraph*G) //编号查找{intnum=0;printf("\n 请输入您要查询的景点编号 :");scanf("%d",&num);printf("\n 以下是您所查询的信息 :\n");printf(" 编号\t 名称\t\t 简介\n");printf(" %d\t %s\t %s\t",G->vexs[num].num,G->vexs[num].name,G->vexs[num].introduction);getchar();}intread_info(MGraph*G){FILE*fp;inti=0,j;if((fp=fopen("E:/ 旅游图.txt","rt"))==NULL){printf("\n 库存文件不存在,请创建 ");return0;}while(!feof(fp)){fscanf(fp,"%d",&G->vexnum);for(i=1;i<=G->vexnum;i++)for(j=1;j<=G->vexnum;j++){fscanf(fp,"%d%s%d%d%s",&G->vexs[i].num,G->vexs[i].name,&G->arcs[i][j].adj,&))))))))))))))j,G->vexs[i].introduction);}}fclose(fp);return1;}intsave_info(MGraph*G) //文件的保存景点信息{FILE*fp;inti,j;if((fp=fopen("E:/ 旅游图.txt","wt"))==NULL){printf("\n 读取文件错误 .按任意键退出! ");return0;}fprintf(fp,"%d\n",G->vexnum);for(i=1;i<=G->vexnum;i++)for(j=1;j<=G->vexnum;j++)fprintf(fp,"%d%s%d%d%s\n",G->vexs[i].num,G->vexs[i].name,G->arcs[i][j].adj,j,G->vexs[i].introduction);fclose(fp);return1;}MGraph*CreatUDN(MGraph*G) //初始化图形,接受用户输入{inti,j,k,w;charv1[20],v2[20];printf("\n 请输入地图所有景点的数目 ,以及所有路径的数目 :

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论