请使用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 13:17:20 浏览: 81
基于 C++ 实现大学校园导航系统【100010874】
5星 · 资源好评率100%
以下是使用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;
}
阅读全文