校园导航系统不是很难,因为最短路径已经有了Dijkstra算法,这就可以直接用。
我们需要的只是往这个算法里面加参数还有对界面的创作,这些都很简单。不过用算法还得需要了解算法,所以建议大家还是去理解一下这个算法的内涵。实际运行可能和我的运行结果有出入,应该只是显示的问题。
前期准备:
呈现结果:
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>//导入头文件
#define MaxLen 1000//define可以定义一个标识符为一个常量,此处将MaxLen定义为无穷大方便后续算法之中使用
#define Max 100//定义最大容量为100
void InitDis();//初始化map数组里面的各种距离信息
void Dijkstra(int v0,int s);//Dijkstra最短路径算法
void MapList();//地图界面
void Welcome();//欢迎界面
void Menu();//菜单界面
void BuildList();//景点信息界面
void Quit();//退出界面
void MenuSystem();//菜单逻辑
int map[Max][Max],Flag[Max],Dis[Max];
char name[37][50]={"","西门","西二门","孝武综合楼","天工/天成楼","湛林体育馆","南三门","湖西路","平桥","校医院","拱桥","西区宿舍","孔子广场","南二门","经法/外语楼",
"樱花林","体育楼","格物楼","西苑/西霞餐厅","校史馆","教六","北门","图书馆","教一","明德楼","喷泉广场","计科楼","南大门","音乐/美术楼","三里餐厅",
"三里宿舍","湖东路","东苑餐厅","东区宿舍","广播台","人文广场","东门"};
//此处可以使用结构体也可以使用像我一样的二维数组,但是注意我的二维数组的第一个是空的,以便后续输出的时候序号和建筑物一对一。
void InitDis()//初始化距离信息
{
int i,j;
for(i=1;i<=36;i++)//初始化map,使得景点自己和自己的距离为0,剩下的距离为无穷大。
for(j=1;j<=36;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=MaxLen;
}
//此处存储各个景点之间的距离。注意一定要按顺序来,例如不可以先map[2][5]再[2][3],因为后面的for循环会覆盖掉
map[1][5]=100;
map[2][3]=105;map[2][5]=128;map[2][7]=150;map[2][8]=200;
map[3][