课程设计:旅游管理系统!C语言+图结构带你轻松完成作业(旅游系统设计与实现)

课程设计:旅游管理系统!C语言+图结构带你轻松完成作业(旅游系统设计与实现)

问题描述:

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

1.基本要求

(1)创建图的存储结构。

(2)输入两个景点名,就可以得到从一个景点到达另一个景点的所有简单路径、相应路径的路程公里数、行走的方法(每一段是步行,还是坐索道);

(3)输入两个景点名,就可以得到其最短路径,即:路程最短的行进方法;如果两者无路径可通,就得出“两景点不可达的信息”。

2.重点、难点

重点:

(1)通过实验掌握图状结构数据的存储与表式;

(2)通过实验掌握对图的存储、遍历、运算等各种操作;

(3)深入理解图的特征及应用;

难点:

(1)任意两个景点所有路径的计算;

(2)最短路径的计算与算法设计。

代码示例:

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define N 15#define MAX 999int min_len[N];int route[N][N];int visited[N];int flag[N];int stack[N];int path[N][N];int temp[N][N];int start=99,end=99;int v,w,m=1;int static n=0;typedef struct{ char name[N][20]; int length[N][N]; char way[N][N];}Point;void init_path(){ int i,k; for(i=0;i<N;i ) { path[i][0]=start;path[i][1]=i; for(k=2;k<N;k ) path[i][k]=999; }}void read_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;i<N;i ) fscanf(fp1,"%s",&info->name[i]); fclose(fp1); for(i=0;i<N;i ){ for(j=0;j<N;j ){ fscanf(fp2,"%d",&info->length[i][j]); temp[i][j]=info->length[i][j]; } } fclose(fp2); for(i=0;i<N;i ){ for(j=0;j<N;j ) fscanf(fp3,"%c",&info->way[i][j]); } fclose(fp3);}void output_view(Point *info){ int i,j; printf("一共有%d个景点,关系如下:nn ",N); for(i=0;i<N;i ) printf("%-7s",info->name[i]); printf("n"); for(i=0;i<N;i ) for(j=0;j<=N;j ) { if(j==0)printf("%-3s",info->name[i]); if(j!=N)printf("M(%c)",info->length[i][j],info->way[i][j]); else printf("n"); }}void Dijkstra(Point *info){ int i=1,j,min; for(v=0;v<N;v ) //循环初始化 { flag[v]=0; min_len[v]=info->length[start][v]; for(w=0;w<N;w ) route[v][w]=0; //设空路径 if(min_len[v]<MAX) { route[v][start]=1; route[v][v]=1; } } min_len[start]=0; flag[start]=0; //初始化start顶点属于集合S for(i=1;i<N;i ) //开始主循环 每次求得v0到某个顶点v的最短路径 并加v到集合S中 { min=MAX; for(w=0;w<N;w ) if(!flag[w]) //如果w顶点在V-S中 { //这个过程最终选出的点 应该是选出当前V-S中与S有关联边 //且权值最小的顶点 书上描述为当前离start最近的点 if(min_len[w]<min) { v=w; min=min_len[w]; } } flag[v]=1; //选出该点后加入到合集S中 for(w=0;w<N;w ) //更新当前最短路径和距离 { if(!flag[w]&&(min info->length[v][w]<min_len[w])) { for(j=0;j<N;j ) path[w][j]=path[v][j]; for(j=0;j<N;j ) if(path[w][j]==999) {path[w][j]=w;break;} min_len[w]=min info->length[v][w]; route[w][w]=1; } } }}void DFS(Point *info,int p){ int i,j,len; visited[p]=1; for(i=0;i<N;i ) { if(info->length[p][i]!=MAX) { if(i==end) { n ;printf("第%d条: ",n); for(j=0;j<m;j ) { stack[m]=end; //printf("(%d,%s,%c)-->",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)nn",end 1,info->name[end]); printf("(%s)nn",info->name[end]); } else if(!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--; } } }}void receive(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;i<N;i ) { if(strcmp(a,info->name[i])==0)start=i; if(strcmp(b,info->name[i])==0)end=i; } init_path(); //for(i=0;i<N;i )printf(" %d ",min_len[i]); if(start==99||end==99)printf("输入错误,请重新输入景点名n"); else { Dijkstra(info); //for(i=0;i<N;i )printf(" %d ",min_len[i]); //printf("@%d %d %d",start,end,min_len[end]); if(min_len[end]!=MAX) { printf("景点%s到景点%s最短路径长度为:%dn所有简单路径:n", info->name[start],info->name[end],min_len[end]); for(i=0;i<N;i ) visited[i]=0; stack[0]=start; DFS(info,start); printf("一共有%d条路径!n",n); printf("景点%s到景点%s最短路径长度为:%dn", info->name[start],info->name[end],min_len[end]); printf("最短路径为: "); for(i=0;i<N;i ) { if(path[end][i 1]==999)break; //printf("(%d,%s)--%c-->",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;}int main(){ 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) { case 'S':msgbox(view_info);receive(view_info);printf("输入操作:");break; case 'E':exit(0); default :cur_sys();msgbox(view_info);printf("输入操作:");continue; } } printf("谢谢使用!!!");}

写在最后:对于准备学习C/C 编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

课程设计:旅游管理系统!C语言+图结构带你轻松完成作业(旅游系统设计与实现)

编程学习视频分享:

课程设计:旅游管理系统!C语言+图结构带你轻松完成作业(旅游系统设计与实现)

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C 感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C 的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年6月10日 上午9:46
下一篇 2022年6月10日 上午9:48

相关推荐

  • 装配式项目管理

    装配式项目管理 装配式项目管理是一种新兴的项目管理方法,它将建筑项目分解为一系列可管理的任务和活动,通过协调和整合这些任务和活动来实现项目的目标和成果。在装配式项目管理中,项目经理…

    科研百科 2024年8月15日
    65
  • 申报科研项目技术水平包括

    科研项目申报中技术水平包括的重要性 在申报科研项目时,技术水平包括是一项非常重要的因素。技术水平包括的项目能力,能够影响到项目的进度、质量、成本等方面。因此,在申报科研项目时,选择…

    科研百科 2024年10月24日
    2
  • 科学家搞科研(科学家在电脑上的科研项目)

    科学家在电脑上的科研项目 电脑在现代社会中已经成为了人们生活和工作中不可或缺的一部分。在电脑上进行科研项目已经成为了许多科学家的日常工作。这些科研项目不仅涉及到科学理论和技术,还涉…

    科研百科 2024年8月3日
    68
  • 教务系统管理项目的收获

    教务系统管理项目收获 教务系统管理项目是一个非常重要的项目,它可以帮助我们更好地管理学校的教学和行政事务。这个项目的收获主要包括以下几个方面。 更好的团队协作 教务系统管理项目需要…

    科研百科 2025年1月27日
    1
  • 中国共产党党和国家机关基层组织工作条例(关于新形势下党内政治生活的若干准则)

    中国共产党党和国家机关基层组织工作条例 (2010年4月21日中共中央政治局常委会会议审议批准 2010年6月4日中共中央发布 2019年11月29日中共中央政治局会议修订) 第一…

    科研百科 2023年7月2日
    240
  • 如何制作一个实用的餐饮小程序?(如何制作一个实用的餐饮小程序视频)

    1、餐饮小程序可以为餐饮行业解决痛点 对于传统餐饮行业来说,其最大的问题,就是到店人流少,商家无法持续地跟踪维护客户,客户的流失率高。 商家如果有了小程序之后,就可以通过小程序进行…

    科研百科 2023年4月4日
    300
  • 预期研究目标

    预期研究目标:探究人类对自然声音的感知和反应机制 近年来,随着科技的不断进步和人们对自然声音的不断探索,人类对自然声音的感知和反应机制研究也越来越重要。本研究的预期目标是探究人类对…

    科研百科 2024年10月20日
    0
  • 甘肃省药品科研项目

    甘肃省药品科研项目 近年来,甘肃省药品科研项目一直备受关注。作为甘肃省的一个重要组成部分,药品科研项目在保障人民健康方面发挥着重要的作用。 在甘肃省药品科研项目中,我们注重提高药品…

    科研百科 2025年4月9日
    1
  • 公司管理人员损害公司利益责任纠纷的实务认定(损害公司利益责任纠纷 规定)

    公司管理人员损害公司利益责任纠纷,一般指公司董事、监事、高级管理人员(下称“公司管理人员”)执行公司职务时违反法律、行政法规或者公司章程的规定,给公司造成损失而发生的纠纷。为了约束…

    2022年6月17日
    451
  • 无锡市副处级干部名单公示

    无锡市副处级干部名单公示无锡市副处级干部名单公示1、具体案情:徐州城(即河北省市)章丘区(章丘区)四年级学生吴某,其兄吴某被徐州县尹强掌丞所杀害,犯事前联系袁某提出的批评,在法院驳…

    科研百科 2024年11月27日
    3