校园交通导游系统

1.1  需求分析

随着社会的发展,越来越多的大学生选择去找同学,游历一些名校,然而到了一个陌生的学校又该怎么样去选择利用更少的时间,走最少的路去游历校园的所有景点呢。此时就需要这块校园交通导游系统了。

程序要求至少包括10个以上的校园建筑物,每两个建筑物可以有不同的路径,并且路长可能不同,要求找出从任意建筑物到达另一建筑物的最短路径。先从文件中读取校园的各个建筑物以及相互之间的路径和路长,构造校园的导游图。其次,根据用户输入的两个建筑物,给出两个建筑物点之间的最短路径。

1.2  运用的数据结构模型

此程序运用了结构体用来存储校园建筑物的编号和建筑物的名称,另用一结构体存储建筑物间的权值;

计算任意两建筑物间路径长度用到的是弗洛伊德算法,通过判断两建筑物间是否路径,然后计算两建筑物间的最短路径。

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define INF 32767

#define MAX 16

#define NAME_MAX 20

typedef struct

{

int WEIGHT;   //建筑物的权值

char NAME[NAME_MAX];    //建筑物的名字

}View;

typedef struct

{

View Vertex[MAX];    //存储顶点

View Weight[MAX][MAX];   //权值的坐标位置

}MGraph;

void Dispath(MGraph MG, View _Weight[][MAX], View Path[][MAX], int Start, int End);

void CreateMGraph(MGraph *MG)

{

int i, j;

strcpy(MG->Vertex[0].NAME, "校大门");  strcpy(MG->Vertex[1].NAME, "图书馆"); strcpy(MG->Vertex[2].NAME, "老校区操场");

strcpy(MG->Vertex[3].NAME, "6号宿舍"); strcpy(MG->Vertex[4].NAME, "小礼堂"); strcpy(MG->Vertex[5].NAME, "下沉光场");

strcpy(MG->Vertex[6].NAME, "学宛餐厅"); strcpy(MG->Vertex[7].NAME, "专家公寓"); strcpy(MG->Vertex[8].NAME, "教工3村");

strcpy(MG->Vertex[9].NAME, "荷花池"); strcpy(MG->Vertex[10].NAME, "9#教学楼"); strcpy(MG->Vertex[11].NAME, "12#教学楼");

strcpy(MG->Vertex[12].NAME, "15#教学楼"); strcpy(MG->Vertex[13].NAME, "学生广场"); strcpy(MG->Vertex[14].NAME, "网球场");

strcpy(MG->Vertex[15].NAME, "东南餐厅");

for(i = 0; i < MAX; i++)       //初始化邻接矩阵

{

for(j = 0; j < MAX; j++)

{

MG->Weight[i][j].WEIGHT = INF;

if(i == j)

{

MG->Weight[i][j].WEIGHT = 0;

}

}

}

MG->Weight[0][1].WEIGHT = 60;MG->Weight[0][2].WEIGHT = 90;MG->Weight[0][3].WEIGHT = 100;MG->Weight[1][2].WEIGHT = 20;

MG->Weight[1][3].WEIGHT = 50;MG->Weight[1][4].WEIGHT = 40;MG->Weight[2][4].WEIGHT = 65;MG->Weight[3][5].WEIGHT = 80;

MG->Weight[4][5].WEIGHT = 55;MG->Weight[5][6].WEIGHT = 50;MG->Weight[5][7].WEIGHT = 100;MG->Weight[6][7].WEIGHT = 130;

MG->Weight[2][8].WEIGHT = 250;MG->Weight[7][8].WEIGHT = 150;MG->Weight[8][9].WEIGHT = 100;MG->Weight[9][10].WEIGHT = 40;

MG->Weight[9][11].WEIGHT = 60;MG->Weight[10][11].WEIGHT = 30;MG->Weight[11][12].WEIGHT = 50;MG->Weight[11][13].WEIGHT = 15;

MG->Weight[10][13].WEIGHT = 75;MG->Weight[12][13].WEIGHT = 45;MG->Weight[12][14].WEIGHT = 160;MG->Weight[13][14].WEIGHT = 100;

MG->Weight[14][15].WEIGHT = 120;

for(i = 0; i < MAX; i++)      //对称赋值

{

for(j = i; j < MAX; j++)

{

MG->Weight[j][i].WEIGHT = MG->Weight[i][j].WEIGHT;

}

}

}

void Floyd(MGraph MG, int Start, int End)

{

View _Weight[MAX][MAX], Path[MAX][MAX];

int i, j, k;

for(i = 0; i < MAX; i++)

{

for(j = 0; j < MAX; j++)

{

_Weight[i][j].WEIGHT = MG.Weight[i][j].WEIGHT;

Path[i][j].WEIGHT = -1;

}

}

for(k = 0; k < MAX; k++)   //弗洛伊德算法查找最短路径

{

for(i = 0; i < MAX; i++)

{

for(j = 0; j < MAX; j++)

{

if(_Weight[i][j].WEIGHT > _Weight[i][k].WEIGHT + _Weight[k][j].WEIGHT)   //是否是最短路径

{

_Weight[i][j].WEIGHT = _Weight[i][k].WEIGHT + _Weight[k][j].WEIGHT;

Path[i][j].WEIGHT = k;

}

}

}

}

Dispath(MG, _Weight, Path, Start, End);

}

void Ppath(MGraph MG, View Path[][MAX], int i, int j)

{

int k;

k = Path[i][j].WEIGHT;

if(k == -1)

{

return;

}

Ppath(MG, Path, i, k);

printf("%s->", MG.Vertex[k].NAME);

Ppath(MG, Path, k, j);

}

void Dispath(MGraph MG, View _Weight[][MAX], View Path[][MAX], int Start, int End)

{

int i, j;

for(i = 0; i < MAX; i++)

{

for(j = 0; j < MAX; j++)

{

if(_Weight[i][j].WEIGHT == INF)

{

if(i != j)

{

printf("从%s到%s没有路径\n",MG.Vertex[i].NAME, MG.Vertex[j].NAME);

}

}

if(i == Start && j == End)

{

printf("\n>>>>从[%s]=>[%s]的最短路径长度为:%d\n\n最短路径为\n",MG.Vertex[i].NAME, MG.Vertex[j].NAME, _Weight[i][j]);

printf(">>>>%s->", MG.Vertex[i].NAME);

Ppath(MG, Path, i, j);

printf("%s\n\n", MG.Vertex[j].NAME);

}

}

}

}

void One_Two(MGraph MG)

{

int Start, End, Value;

printf("请输入一个起始点编号: ");

Value = scanf("%d", &Start);

while((Start < 1 || Start > 16) || Value == 0)

{

while(getchar() != ‘\n‘){}

printf("\n>>>输入起始点编号错误!请重新输入!\n\n");

printf("请输入一个起始点编号: ");

Value = scanf("%d", &Start);

}

printf("请输入一个目的地编号: ");

Value = scanf("%d", &End);

while((End < 1 || End > 16) || Value == 0)

{

while(getchar() != ‘\n‘){}

printf("\n>>>输入目的地编号错误!请重新输入!\n");

printf("请输入一个目的地编号: ");

Value = scanf("%d", &End);

}

Floyd(MG, Start-1, End-1);

}

void MENU(MGraph MG)

{

int i, n = 1;

printf("\n");

printf("\t**********************************************\n");

printf("\t&&&&&&         南阳理工校园导航         &&&&&&\n");

printf("\t**********************************************\n");

for(i = 0; i < MAX; i++)

{

if(i == 0)

{

printf("\t[%d]%s\t", i+1, MG.Vertex[i].NAME);

n++;

}

else

{

printf("[%d]%s\t", i+1, MG.Vertex[i].NAME);

if(n % 3 == 0)

printf("\n\t");

n++;

}

}

printf("\n\t**********************************************\n");

printf("\t**********************************************\n\n");

printf("\t\t[1]查询任意两点之间的距离\n");

printf("\t\t[0]退出\n\n");

}

int main()

{

MGraph MG;

CreateMGraph(&MG);

while(1)

{

int Value, n = 3;

MENU(MG);

printf(">>>请选择: ");

Value = scanf("%d", &n);

if(Value == 0)

{

while(getchar() != ‘\n‘){}

}

switch(n)

{

case 1: One_Two(MG);break;

case 0: exit(0);

default: printf("输入错误!请重新输入!\n");

}

}

return 0;

}

时间: 2024-11-17 03:50:08

校园交通导游系统的相关文章

校园导游系统(C++实现,VC6.0编译,使用EasyX图形库)

//校园导游系统.cpp 1 #include <graphics.h> 2 #include <conio.h> 3 #include <stdio.h> 4 #include <io.h> 5 #include <stdlib.h> 6 #include <string> 7 #include <iostream> 8 #include <math.h> 9 #include <fstream>

黑马程序员-交通灯系统

要求: 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 信号灯忽略黄灯,只考虑红灯和绿灯. 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制. 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑. 注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆. ?每辆车通过路口时间为1秒(提示:可通过线程Sle

校园网站群系统源码

校园网站系统源码  点击下载源码 源码描述: 校园网站群系统结合学校现代信息化发展需要以及学校需求而开发的一套人性化校园网站群系统.有效的提供了学校的宣传以及校园学习环境和校园信息互动,以及数据的安全处理. 适合:学校单位使用,技术人员开发与学习. 特点:可创建多个学校门户网站:学校聚合页面人性化整合:强大的管理后台:内容标签便捷式建站群 功能描述: 1.学校网站群聚合功能: <1>网站首页:显示最新统计数据,如:学校,信息,图片,下载:最新公告:最新信息:学校列表:图片信息:下载信息: &l

智慧交通管控系统平台开发解决方案

智慧交通是指在交通领域运用物联网.云计算.互联网.人工智能.自动控制.移动互联网等技术,通过高新技术汇集交通信息.以此对交通管理.交通运输.公众出行等等交通领域全方面以及交通建设管理全过程进行管控支撑.使交通系统在区域.城市甚至更大的时空范围具备感知.互联.分析.预测.控制等能力,以充分保障交通安全.发挥交通基础设施效能.提升交通系统运行效率和管理水平,为通畅的公众出行和可持续的经济发展服务. 智慧交通管理系统采用: 1.先进的交通信息服务系统(ATIS)ATIS是建立在完善的信息网络基础上的.

PHP基于B/S模式下的校园在线投票系统,源码分享

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON.PHP.C#.安卓等多项技术. 今天将为大家分析一个校园在线投票系统,系统web前端设计工具为Adobe Dreamweaver,前端开发语言html+css+javascript,php后端语言和mysql数据库. 从国际互联网到校园网,企业局域网,各种网上投票系统随处可见,意见调查,用户信息统计,经营情况调查都可以作为投票的内容.校园在线投票系统凭借其方便快捷等特点,已经成为统计收集信

PHP基于B/S模式的校园餐厅展示系统、源码分享

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON.PHP.C#.安卓等多项技术. 今天将为大家分析一个校园餐厅展示系统,随着我国科学技术的不断发展,计算机的应用日渐成熟,其强大的功能给人们留下深刻的印象,它已经应用到了人类社会的各个层次的领域,发挥着重要的不可替换的作用.随着经济不断的发展,国家对教学的不断重视,办学的规模不断增大,生活水平不断提高,用户对餐饮要求也越来越严格.校园餐厅展示系统是为校园用户而设计的平台,通过平台用户可以进行

基于SSM框架下的JAVA校园闲置物品共享系统

每天记录学习,每天会有好心情.*^_^* 今天和一个朋友共同完成了一个校园闲置物品共享系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架.我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他.和往常一样选用简单又便捷的MYECLIPSE作为开发工具,这是一个 后台项目.这个系统的介绍是这样的:在校大学生的生活和学习用品丰富,更新速度极快,导致大量的闲置物品被搁置而无法被利用.“不差钱校园闲置物品互换公益网”针对这一现象,为在校师生提供了一个旧物交换的平台,本网站采用五层构架设计

利用敏捷开发的原则开发自己的大学生校园博客系统

  敏捷开发原则 我们的做法 1 尽早并持续交付有价值的软件以满足顾客需求 软件暂时未完成,但目前已经交付某些文档,可以通过文档与用户进行交互. 2 欢迎需求的变化,并利用这种变化来提高用户的竞争优势 不时向同学询问或自我思考看自己所要做的能否使大学生满意. 3 经常发布可用的软件,发布间隔可以从几周到几个月,能短则短 由于我们的项目是要求在一个月内进行交付,所以我们并没有进行软件的交付,但是我们每周都会交一些设计文档,对项目及完成进度进行说明. 4 业务人员和开发人员在项目开发过程中应该每天共

锐职校园宣讲会搜索系统

对搜索引擎的定义: 一个搜索引擎由搜索器 .索引器 .检索器和用户接口 四个部分组成. 1:搜索器:不断的发现新的校园宣讲会链接, 并将网页下载下来 2:索引器:从网页正文中提取宣讲会主题,正文,时间,地点,工作城市,专业等维度的信息. 将这些信息写入索引数据库,并且将他们对应的链接记录下来 3:检索器:根据用户的输入和选择去从索引库匹配信息并将信息按照统一的格式返回. 4:用户接口:APP,Web,微信.用户接口负责接收用户的关键词, 并将返回的结果进行处理展示给用户 . 演示地址: http