您的位置首页  散文日记

旅游管理系统_c语言旅游管理系统太疯狂了

问题描述:创建一个至少有15个点的有向网表示的某个旅游景点的导游图。顶点代表景点,类型为字符串(例如,泰山导

旅游管理系统_c语言旅游管理系统太疯狂了

 

问题描述:创建一个至少有15个点的有向网表示的某个旅游景点的导游图顶点代表景点,类型为字符串(例如,泰山导游图:“天地广场门”,“十八盘”,“冯玉祥墓”,“桃花峪门”,“中天门”,“南天门”,“玉皇顶”等),弧表示两个景点之间可以直达,弧上的权值表示两个景点之间的路程(公里数),弧上还有到达方法的信息(有步行和索道两种)。

建立一个游客咨询系统1.基本要求(1)创建图的存储结构(2)输入两个景点名,就可以得到从一个景点到达另一个景点的所有简单路径、相应路径的路程公里数、行走的方法(每一段是步行,还是坐索道);(3)输入两个景点名,就可以得到其最短路径,即:路程最短的行进方法;如果两者无路径可通,就得出“两景点不可达的信息”。

2.重点、难点重点:(1)通过实验掌握图状结构数据的存储与表式;(2)通过实验掌握对图的存储、遍历、运算等各种操作;(3)深入理解图的特征及应用;难点:(1)任意两个景点所有路径的计算;(2)最短路径的计算与算法设计。

代码示例:#include#include#include#include#define N 15#define MAX 999

int min_len[N];int route[N][N];int visited[N];int flag[N];intstack[N];int path[N][N];int temp[N][N];int

start=99,end=99;int v,w,m=1;intstatic n=0;typedefstruct{char name[N][20];int length[N][N];char way[N][N];

}Point;voidinit_path(){int i,k;for(i=0;i

path[i][k]=999; }}voidread_file(Point *info){int i=0,j;char ch[N][10]; FILE *fp1,*fp2,*fp3;

if((fp1=fopen("view_name.txt","r"))==NULL){printf("Open failed!!!\n");exit(0); }if((fp2=fopen("view_length.txt"

,"r"))==NULL){printf("can not open file!");exit(0); }if((fp3=fopen("view_way.txt","r"))==NULL){printf

("can not open file!");exit(0); }for(i=0;iname[i]); fclose(fp1);for

(i=0;ilength[i][j];

} } fclose(fp2);for(i=0;i

fclose(fp3);}voidoutput_view(Point *info){int i,j;printf("一共有%d个景点,关系如下:\n\n ",N);for(i=0;i

printf("%-7s",info->name[i]);printf("\n");for(i=0;i

,info->name[i]);if(j!=N)printf("%4d(%c)",info->length[i][j],info->way[i][j]);elseprintf("\n"); }

}voidDijkstra(Point *info){int i=1,j,min;for(v=0;v

0; min_len[v]=info->length[start][v];for(w=0;w

if(min_len[v]

0; flag[start]=0; //初始化start顶点属于集合Sfor(i=1;i

{ min=MAX;for(w=0;w

//且权值最小的顶点 书上描述为当前离start最近的点if(min_len[w]

} } flag[v]=1; //选出该点后加入到合集S中for(w=0;w

//更新当前最短路径和距离 {if(!flag[w]&&(min+info->length[v][w]

for(j=0;jlength[v][w];

route[w][w]=1; } } }}voidDFS(Point *info,int p){int i,j,len; visited[p]=1

;for(i=0;ilength[p][i]!=MAX) {if(i==end) { n++;

printf("第%d条: ",n);for(j=0;j",stack[j]+1,info->name[stack[j]],info->way[stack[j]][stack[j+1]]);

printf("(%s)---%c--->",info->name[stack[j]],info->way[stack[j]][stack[j+1]]); }//printf("%d(%s)\n\n",end+1,info->name[end]);

printf("(%s)\n\n",info->name[end]); }elseif(!visited[i]) { info->length[p][i]=MAX;

visited[i]=1;stack[m]=i; m++; DFS(info,i); info->length[p][i]=temp[p][i];

visited[i]=0; m--; } } }}voidreceive(Point *info)

{int i;char a[20],b[20];printf("\n输入起点和终点标号,按# #退出:");scanf("%s%s",a,b);printf("得出所有简单路径和最短路径\n");if(

strcmp(a,"#")==0&&strcmp(b,"#")==0)return;for(i=0;iname[i])==0)start=i;

if(strcmp(b,info->name[i])==0)end=i; } init_path();//for(i=0;i

if(start==99||end==99)printf("输入错误,请重新输入景点名\n");else { Dijkstra(info);//for(i=0;i

//printf("@%d %d %d",start,end,min_len[end]);if(min_len[end]!=MAX) {printf("景点%s到景点%s最短路径长度为:%d\n所有简单路径:\n"

, info->name[start],info->name[end],min_len[end]);for(i=0;i

0;stack[0]=start; DFS(info,start);printf("一共有%d条路径!\n",n);printf("景点%s到景点%s最短路径长度为:%d\n", info->name[start],info->name[end],min_len[end]);

printf("最短路径为: ");for(i=0;i",path[end][i]+1,info->name[path[end][i]],info->way[path[end][i]][path[end][i+1]]);

printf("(%s)---%c--->",info->name[path[end][i]],info->way[path[end][i]][path[end][i+1]]); }

//printf("%d(%s)\n",path[end][i]+1,info->name[path[end][i]]);printf("(%s)\n",info->name[path[end][i]]);

}else {printf("\n非常抱歉!!!景点%s无法到达%s",info->name[start],info->name[end]);}printf("\n"); } start=end=

99;n=0;}intmain(){int i,j=0;char x; Point *view_info=NULL; view_info=(Point *)malloc(sizeof(Point));

read_file(view_info); msgbox(view_info);printf("输入操作:");while(scanf("%c",&x)!=EOF) {switch(x)

{caseS:msgbox(view_info);receive(view_info);printf("输入操作:");break;caseE:exit(0);default :cur_sys();msgbox(view_info);

printf("输入操作:");continue; } }printf("谢谢使用!!!");}写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186