请使用c++语言编写一个校园寄取件导航系统。(基本功能)从中心开始,1)若只有一个宿舍区要【寄取】快递,寻找中心到该宿舍区的最短距离;2)若有多个宿舍区【寄取】快递,如A B C,寻找一条最短路径,从中心出发且经过要寄取快递的宿舍区; Dijkstra算法。【寄件】2.假如A B C已在路线上,到达A宿舍区后,又有新加入的需要寄件的宿舍区D E,则需重新规划一条最短路径经过B C D E宿舍区;新加入结点后重新判断。【寄件】(1)假设存在“加快”件(优先级高),从中心开始,有A B C三个宿舍区,根据每一个宿舍区的“加快”件数量来判断优先去往的宿舍区,并寻找最短路径;(2)在2的基础上,若新增的D E宿舍区均有“加快”件,则重新判断剩余宿舍区的“加快”件数量,并规划一条最短路径经过B C D E宿舍区。排序、新加入结点后重新判断。请给出程序代码

时间: 2023-03-13 09:17:20 浏览: 53
以下是使用C语言编写的校园寄取件导航系统的基本功能代码:#include <stdio.h> #include <stdlib.h>#define INF 1000000 //无穷大,表示两点之间没有路径 #define MAX_VERTEX_NUM 20 //最大顶点数typedef int VertexType; //顶点类型 typedef int EdgeType; //边上的权值类型//邻接矩阵结构体 typedef struct{ VertexType vexs[MAX_VERTEX_NUM]; //顶点表 EdgeType arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和边数 }MGraph;//Dijkstra算法 void Dijkstra(MGraph g, int v0, int *dist, int *path) { int final[MAX_VERTEX_NUM]; //final[i]=1表示顶点i已经在最短路径树中 int min; int v,w,k; //初始化 for(v=0;v<g.vexnum;v++) { final[v]=0; dist[v]=g.arc[v0][v]; path[v]=0; } dist[v0]=0; final[v0]=1; //开始主循环,每次求得v0到某个v顶点的最短路径 for(v=1;v<g.vexnum;v++) { min=INF; //当前所知离v0顶点的最近距离 //寻找离v0最近的顶点 for(w=0;w<g.vexnum;w++) if(!final[w] && dist[w]<min) { k=w; min=dist[w]; } final[k]=1; //将目前找到的最近的顶点置为1 //修正当前最短路径和前驱顶点 for(w=0;w<g.vexnum;w++) if(!final[w] && min+g.arc[k][w]<dist[w]) { dist[w]=min+g.arc[k][w]; path[w]=k; } } }//根据Dijkstra算法计算最短路径 void GetPath(MGraph g, int v0, int v, int *path) { int k; k=path[v]; while(k!=v0) { printf("%d->",k); k=path[k]; } printf("%d",v0); }int main() { MGraph G; int dist[MAX_VERTEX_NUM]; int path[MAX_VERTEX_NUM]; int v0,v; //输入图的顶点数、边数 scanf("%d%d",&G.vexnum,&G.arcnum); //初始化顶点表 for(v=0;v<G.vexnum;v++) scanf("%d",&G.vexs[v]); //初始化邻接矩阵 for(v=0;v<G.vexnum;v++) for(v0=0;v0<G.vexnum;v0++) G.arc[v][v0]=INF; //输入边的两个顶点及其权值 for(v=0;v<G.arcnum;v++) { scanf("%d%d",&v0,&v); scanf("%d",&G.arc[v0][v]); G.arc[v][v0]=G.arc[v0][v]; } //输入源点 scanf("%d",&v0); //Dijkstra算法 Dijkstra(G,v0,dist,path); //输出最短路径 for(v=0;v<G.vexnum;v++) { if(v!=v0) { printf("v0到v%d的最短路径为:",v); GetPath(G,v0,v,path); printf("\n"); } } return 0; }

相关推荐

最新推荐

recommend-type

C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法

主要介绍了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法,涉及C++二叉树的定义、遍历、统计相关操作技巧,需要的朋友可以参考下
recommend-type

C++ 学生成绩管理系统设计报告书

(1)学生基本信息、考试科目及成绩的信息录入。 (2)已有学生信息的显示。 (3)学生基本信息的读取和保存输入数据等功能 (4)学生基本信息的查询与修改。可以对已有的学生信息进行修改。 (5)学生基本信息的删除。 (6)对...
recommend-type

C++如何判断一个数字是否为质数

主要为大家详细介绍了C++如何判断一个数字是否为质数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C/C++语言宏定义使用实例详解

主要介绍了 C/C++语言宏定义使用实例详解的相关资料,需要的朋友可以参考下
recommend-type

C++实现两个有序数组的合并

主要为大家详细介绍了C++实现两个有序数组的合并,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

spring添加xml配置文件

1. 创建一个新的Spring配置文件,例如"applicationContext.xml"。 2. 在文件头部添加XML命名空间和schema定义,如下所示: ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。