校园导航系统

【问题描述】
当对校园参观时,会遇到这样的问题:如果从校园的某个位置出发,参观到校园中的所有景点,怎样设计路线,使参观者既能参观所有景点又使走的路程最少。
【数据描述】
定义一个邻接矩阵存储结构,用来存储点和边的信息。
定义一个辅助数组closedge,该数组包含两个分量,lowcost记录从U到V-U具有最小代价的边,adjvex记录改边依附于U中的顶点。
typedef char ElemType;
typedef struct {
ElemType vexs[max];
int arcs[max][max];
int vexnum,arcnum;
}MGraph;
struct {
ElemType adjvex;
int lowcost;
}closedge[max];
【算法思想】
(1)已知校园中各景点和路径的权重,使参观者既能参观所有景点又使走的路程最少。即求最小生成树,使得路径保持连通且经过所有边权值之和最小。
(2)用到Prim算法求最小生成树,算法思想大体为:
设N=(V,E)是一个连通网,T=(U,TE)是N的最小生成树,TE是N中最小生成树中边的集合。
①初始化:令U={u0|u0∈V},TE={}。其中u0是顶点集合V中的某个顶点。
②选择:在所有u∈U,v∈V-U的边(u,v)∈E中,选择一条代价最小的边(ui,vj),将(ui,vj)并入集合TE,同时vj并入U。
③反复执行步骤②,直至U=V为止。
TE必有n-1条边,则T为N的最小生成树。
【C源程序】

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define max 20
#define INFINITY 1000
typedef char ElemType;
typedef struct {ElemType vexs[max];int arcs[max][max];int vexnum,arcnum;
}MGraph;
struct {ElemType adjvex;int lowcost;
}closedge[max];//返回顶点下标
int LocateVex(MGraph G,ElemType v)
{for(int i=0;i<G.vexnum;i++){if(v==G.vexs[i])return i;}return -1;
}
//建立无向图邻接矩阵
void CreatGraph(MGraph &G)
{int  i, j, k,m,n;char v1, v2;srand(time(0));printf("输入校园中景点数及弧数:\n");scanf( "%d%d", &G.vexnum, &G.arcnum );getchar(); printf("输入校园中所有景点:\n" );for( i=0; i<G.vexnum; i++ ){   G.vexs[i]=getchar(); getchar();   }for( i=0; i<G.vexnum; i++ )          //初始化邻接矩阵for( j=0; j<G.vexnum; j++ )G.arcs[i][j]=INFINITY;for( k=0; k<G.arcnum; k++ ){int w;printf("输入校园中的两个景点确定边:\n" );v1=getchar(); getchar();v2=getchar(); getchar();m= LocateVex(G,v1);  n= LocateVex(G,v2);printf("请输入边的权重:\n"); scanf("%d",&w);getchar();G.arcs[m][n]=w;G.arcs[n][m]=w;}printf("邻接矩阵为:\n"); for( i=0; i<G.vexnum; i++ ) {      for( j=0; j<G.vexnum; j++ )printf("%d\t",G.arcs[i][j]);printf("\n");
}
}
//Prim(适用于边稠密的网)
int MiniSpanTree_Prim(MGraph G,ElemType u)
{int k=LocateVex(G,u);for(int j=0;j<G.vexnum;j++){if(j!=k){closedge[j].adjvex=u;closedge[j].lowcost=G.arcs[k][j];}}closedge[k].lowcost=0;int minsum=0;for(int i=1;i<G.vexnum;i++){int minCost=INFINITY;for(int j=0;j<G.vexnum;j++)//找最小值 {if(closedge[j].lowcost!=0&&closedge[j].lowcost<minCost){minCost = closedge[j].lowcost;k=j;}}printf("%c----%c %d\n",closedge[k].adjvex,G.vexs[k],closedge[k].lowcost);minsum+=closedge[k].lowcost;closedge[k].lowcost=0;for(int j=0;j<G.vexnum;j++){if(closedge[j].lowcost!=0&&G.arcs[k][j]<closedge[j].lowcost){closedge[j].adjvex = G.vexs[k];closedge[j].lowcost = G.arcs[k][j];}}}return minsum;
}
int main()
{MGraph G;CreatGraph(G);                                                           //建立无向图的邻接矩阵 printf("请输入从哪个景点出发:\n");char u;scanf("%c",&u);printf("\n 最短路径权重之和为;%d.\n", MiniSpanTree_Prim(G,u));//输出路径与权值return 0;}

【小结】
校园导航问题:
不足之处:将问题过于简单化,就简单实现建立赋权图的邻接矩阵存储结构,和用Prim算法求最短生成树,跟校园导航没有太多关系,不实用。
通过进行数据结构课程设计,对数据结构和算法有了进一步深刻的认识。也发现了自己很多问题。对许多重要的算法不能熟练的运用。仍需对代码进一步完善。
【参考文献】
[1] 赵永升,宋丽华,数据结构.北京:电子工业出版社,2019.
[2] 严蔚敏,数据结构(C语言版).北京:清华大学出版社,2007.

数据结构课程设计 校园导航系统相关推荐

  1. 数据结构课程设计——校园导航系统

    设计思想: 利用迪杰斯特拉求单源最短路算法,设计出郑州升达经贸管理学院的校园导航,求出学校一个景点到另一个景点的最短距离及路线. 系统功能: 将校园设计为平面图,将学校各代表景点构成一个抽象的无向带权 ...

  2. 数据结构课程设计 校园导游系统 c++

    元旦前后利用几天时间完成了数据结构课程设计,学期初计划搞一个*精美* 些的课程设计,最后还是一拖再拖,到最后只来得及实现些基本功能. 团队协作完成,所以代码风格不尽相同. 另外才疏学浅,若有错误恳请不 ...

  3. 2017大二学年 数据结构课程设计-校园十大优秀青年评比

    南 通 大 学   数据结构课程设计报告   姓    名:   班    级: 物联网162 学    号:   指导老师: 杭月琴 选   

  4. 数据结构与算法综合课程设计——校园导航系统

    1.设计目的  应用所学的数据结构与算法知识完成一个具有一定实际意义的应用程序的设计.编码与调试,锻炼实践动手能力,提高编程水平. 2.设计内容  课题名称:校园导航系统 问题描述:校园导航系统用无向 ...

  5. C语言数据结构课程设计-校园导游系统

    倾心原创,转载请备注原文地址,谢谢. 主要内容: 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号.名称.简介等信息,图中的边表示景点间的道路,存放路径长度等信息.要求能够 ...

  6. 数据结构课程设计——校园导游咨询系统

    目录 一.问题描述 基本要求 二.问题分析 实现思路 三.逻辑设计 1.数据结构 2.具体功能 3.概要设计 四.物理设计 1.Main类 2.CampusGuidingSystem类 3.Gener ...

  7. 数据结构课程设计 : 博物馆导航系统

    好久之前写的一个东西了, 运行截图: 对于所有的地点实现已经编号,便于后面算法的实现. 各个功能介绍: 1. 查看地图 地图是自己用记事本写的, 输出的时候直接把记事本中的内容读取输出即可. 另外用一 ...

  8. 校园导游系统数据结构课程设计(附完整代码)

    1 问题内容与目的要求 1.1 算法产生的背景: Floyd 算法又称为加点法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获 ...

  9. java校院导游程序课程设计_数据结构课程设计之校园导游系统

    数据结构课程设计之校园导游系统 放假到现在终于安下心来要搞点学习了,现在对放假前一周的数据结构课设做一个总结,快放假的时候搞数据结构课设,当时满脑子都是期末考试忙着复习,根本没啥心思去做.所以课设一共 ...

最新文章

  1. 使用LoadRunner对Web Services进行调用--Add Service Call
  2. SAP Spartacus应用启用时导入的一些模块
  3. linux爬365租房没有数据,新手求助,LINUX下安装11G不能MOUNT数据库
  4. c++读取文件–结束条件的判断
  5. 修复Sonar中常见的Java安全代码冲突
  6. LVM源码分析2-libdaemon
  7. 自动驾驶再出事!欧洲一辆自动驾驶小公交撞到行人
  8. 概率论信息论基础(随机变量、常用概率分布、贝叶斯规则、信息论基础、结构化概率模型)
  9. easyui确认取消弹窗_Jquery EasyUI中弹出确认对话框
  10. 3d max2012 安装加破解
  11. css实现点点点效果
  12. 进度模型方法论,利用“削峰填谷”进行资源优化
  13. 2018.11.22!今天重温一遍知识点,捋一捋思路
  14. 智能家居系统解决方案
  15. Mathematica 命令大全
  16. git(2)Git 基础
  17. 2019北京物联网智慧城市大数据博览会开启中国之路
  18. POJ2248 Addition Chains(迭代加深搜索)
  19. 统计素数并求和(大数据)
  20. RTSP实时音视频传输介绍

热门文章

  1. Vue.js_04_组件_Element组件库_组件通信_PropsDown_EventsUp
  2. IBM developerWorks几个关注的主题
  3. ArcGis系列-java发布GP分析结果(带样式)
  4. 调试InfoPath 2007脚本
  5. XX教你玩 MiniPC (三)MK908之CPU RK3188启动 bootloader分析
  6. creator 跳跃弧线_CocosCreator零基础制作游戏《极限跳跃》六、制作游戏障碍物实现碰撞检测...
  7. 解决当前网页正在试图打开您的受信任的站点列表中的站点警告问题
  8. 盘点2021年流行报表开发工具【测评】
  9. 线程小游戏制作的心得与体会
  10. 一个大型虚拟项目包含位于不同地点的许多干系人_线下娱乐“换血”,沉浸式体验会成为下一个10年的主题吗?...