要求

(1)将校园中的重要地点(如教学楼、宿舍楼、餐厅、图书馆等主要地点位置以及主要的道路和路口等联系起来并绘制草图,然后将其抽象为图中的结点(序号)、边,道路中各相邻结点间的近似距离作为边上的权值,形成图结构);

(2)对上述图结构采用邻接矩阵方法进行存储,图中结点的实际名称和图序号之间的对应关系可以另外通过建立一个一维数组对应存储(名称和序号能够实现相互转换);

(3)交通查询:输入一个图中起点位置名称(可由程序转换为结点序号)以及要到达的目的地位置名称(可转换为结点序号),就可通过Floyd算法规划出该两点间的一条最短路径并输出该路径中间所经过的主要位置(结点)的名称序列以及该路径的距离。

代码

#include"stdio.h"
#include"stdlib.h"
#define MAXVEX 20
#define FINITY 5000
typedef struct
{int vexs[MAXVEX]; //顶点类int arc[MAXVEX][MAXVEX]; //邻接矩阵int numVertexes;    //图中当前的顶点数和边数int numEdges;
} MGraph;typedef int Patharc[MAXVEX][MAXVEX];typedef int ShortPathTable[MAXVEX][MAXVEX];
void CreateMGraph(MGraph &G)          //这个是创建一个图函数
{int i, j, d, k;//d表示权重printf("学校重点地点有多少和边数:\n");scanf_s("%d", &G.numVertexes);//顶点scanf_s("%d", &G.numEdges); //边数printf("学校名称用序号表示为:\n");//输入顶点信息,建立顶点节点for (i = 0; i < G.numVertexes; i++){scanf_s("%d", &(G.vexs[i]));}//邻接矩阵初始化for (i = 0; i < G.numVertexes; i++){for (j = 0; j < G.numVertexes; j++){G.arc[i][j] = FINITY;}}//这里输入他们的之间的权重for (k = 0; k < G.numEdges; k++){printf("输入该建筑与下一个建筑序号以及之间的距离:\n");scanf_s("%d %d %d", &i, &j, &d);G.arc[i][j] = d;G.arc[j][i] = G.arc[i][j];}
}
void print(MGraph *mg) //这是打印第一个邻接表
{printf("初始化的邻接矩阵:\n");for (int i = 0; i < mg->numVertexes; i++){for (int j = 0; j < mg->numVertexes; j++)printf("%d\t", mg->arc[i][j]);printf("\n");}
}
void Floyd(MGraph G,Patharc *P, ShortPathTable *D)
{int v, w, k;for (v = 0; v < G.numVertexes; ++v){for (w = 0; w < G.numVertexes; ++w)(*D)[v][w] = G.arc[v][w];(*P)[v][w] = w;}for (k = 0; k < G.numVertexes; ++k){for (v = 0; k < G.numVertexes; ++v){for (w = 0; k < G.numVertexes; ++w){if ((*D)[v][w]>(*D)[v][k] + (*D)[k][w]){(*D)[v][w] = ((*D)[v][k] + (*D)[k][w]);(*P)[v][w] = (*P)[v][k];}}}}
}
int main()
{printf("*************************************\n");printf("*欢迎来到校园交通查询系统*\n");printf("*************************************\n");printf("*************************************\n");printf("*序号分别代表学校内的建筑*\n");printf("1.宿舍\n");printf("2.图书馆\n");printf("3.餐厅\n");printf("4.教学楼\n");printf("5.学校中央\n");printf("**************************************\n");int v, w, k;MGraph G;Patharc P;ShortPathTable D;CreateMGraph(G);//printf(&G);Floyd(G, &P, &D);printf("各建筑间最短路径如下:\n");for (v = 0; v < G.numVertexes; ++v){for (w = v + 1; w<G.numVertexes; w++){printf("v%d-v%d weight:%d ", v, w, D[v][w]);k = P[v][w];printf("path: %d", v);while (k != w){printf("-> %d", k);k = P[k][w];}printf("-> %d\n", w);}printf("\n");}printf("最短路径D\n");for (v = 0; v < G.numVertexes; ++v){for (w = 0; w < G.numVertexes; ++w){printf("%d\t", D[v][w]);}printf("\n");}return 0;}

效果

【C语言】构建一个校园交通查询系统程序。能够规划出任意出发地和目的地之间的最短路径。...相关推荐

  1. c语言编写一个简单的答题系统

    利用c语言编写一个简单的答题系统. 思路是先设计好题目和答案,再输入自己的答案,利用输入的答案与正确答案对比,从而得出你回答的对错. (一)捆绑题目和答案 我们可以利用结构体对一个题目捆绑上一个答案. ...

  2. 校园导游图C语言数据结构,用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx...

    用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下 ...

  3. 一个完整的c语言程序结构图,用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx...

    用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码 #define Infinity 1000 #define MaxVertexNum 35 #define MAX 40 #incl ...

  4. c语言作业查询,C语言大作业学生成绩查询系统源代码.doc

    C语言大作业学生成绩查询系统源代码 #include #include struct student { char name[20]; char speciality[10]; int C; int ...

  5. Flutter 构建一个完整的聊天应用程序

    在本教程中,我将向您展示如何使用 Flutter 构建一个完整的聊天应用程序.对于这一部分,我们将创建应用程序的 UI 原型,然后我将向您展示如何使用 firebase 创建后端服务并创建聊天系统. ...

  6. java二分查找宿舍管理_1、任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: (1)采用交互工作方式...

    1.任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: (1)采用交互工作方式 2016-08-22 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 1.任务:为宿舍管理人员编写 ...

  7. 如何构建一个简单的语音识别应用程序

    "In this 10-year time frame, I believe that we'll not only be using the keyboard and the mouse ...

  8. php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...

    导航:网站首页 > 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 相关问题: 匿 ...

  9. Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序

    Nest是一个用于构建高效.可扩展的Node.js服务器端应用程序的框架.它是基于Express.js构建的,并且提供了多种新特性和抽象层,可以让开发者更加轻松地构建复杂的应用程序. 本文将介绍Nes ...

最新文章

  1. 海思3559A上编译OpenCV4.1.0源码操作步骤
  2. SAP HUM 使用HU02将几个HU打包到一个外层新的HU号码里
  3. 高效程序猿之(四)VS2010其他技巧
  4. obj: object是什么意思_面试官问你JavaScript基本类型时他想知道什么?
  5. GPD电脑安装linux,怕虚拟机影响性能?GPD pocket 2 安装 Ubuntu 体验
  6. RabbitMQ之监控(2)
  7. DucleBox | A Game Engine for OpenGL Programming
  8. VS2010解决闪退的方法
  9. Linux 进程热升级
  10. ks线切割编程系统3.13完整版-2次加密注册码
  11. Java项目:基于SSM实现驾校预约管理系统
  12. java开发自学怎么样_Java工程师的薪资待遇怎么样,自学Java开发可以吗?
  13. 运营商劫持是什么、运营商DNS网络劫持如何解决
  14. 2017年十本必读的大数据人工智能领域书籍,你都读过吗?
  15. python使用正则去除字符串里多余的空白字符
  16. You are currently rebasing branch ‘csindex/feature/index_info‘ on ‘d2ef4210a3‘.
  17. 2022.12.14 英语背诵
  18. 自定义控件从入门到轻生之---来个结晶
  19. bilibili 获取播放器(或者视频)地址
  20. Mac 2020版M1 安装虚拟机发现网络不可用(配置方法)

热门文章

  1. node.js——麻将算法(四)胡牌算法的一些优化处理方案(无赖子版)
  2. 【英文写作日知录 第2期】句式汇总 Sun, 04 July 2021
  3. 【算法学习】最优二叉查找树(动态规划)
  4. String类的对象的方法 格式小结 java 1202
  5. 默写测试晋级流程 1126
  6. 9206-1118-周三 猜拳小游戏一次性版本
  7. django 通过路径传参 视图获取get请求
  8. django-学习索引1908版
  9. crontab定时任务不生效问题解决
  10. mac的safari浏览器调试h5