文档到我的资源下载
1. 简单介绍
2. 代码
#include
#include
#include
using namespace std;
/*测试使用十六地点,直接定义*/
#define Num 17
/*最大距离*/
#define Maxedge 32760
/*
* @coder: slience_me
* @time: 2021.12.09
* @blog: www.slienceme.xyz
*/
/*定义对各个地点信息存储的结构体类型*/
typedef struct {
char name[10]; /*用来存储名称信息属性*/
int number; /*距离属性*/
char introduce[100]; /*相关介绍*/
} vertex;
/*定义结构体数组,用来存储我的位置信息 constructions 建筑物的数组,内含有建筑物信息*/
vertex constructions[Num];
/*用来存放两地的对应距离*/
int edge[Num][Num];
/*用来存放最短距离*/
int shortest[Num][Num];
/*用来存放路径*/
int path[Num][Num];
/*河北科技大学新校区平面图,给使用程序者以直观认识*/
int myMap() {
printf("\t\t河北科技大学新校区平面图(括号内为相对应的数字编号)\n\n");
printf(" 西北操场(1)———————校医院(2)——————文法学院(3)——————风雨操场(4) \n");
printf(" | | | | \n");
printf(" | | | | \n");
printf(" 西门(5)—————————牧星湖(6)————————公教楼(7)————————主体育场(8) \n");
printf(" | | | | \n");
printf(" | | | | \n");
printf(" 第三餐厅(9)—————————图书馆(10)—————讲堂群(11)————————东门(12) \n");
printf(" | | | | \n");
printf(" | | | | \n");
printf(" 研究生公寓(13)———工程训练中心(14)———南公教楼(15)——————信息楼(16) \n\n");
printf("\n----------------------------------------------------------------------------\n");
return 0;
}
/*河北科技大学新校区平面图距离图,给使用程序者以直观认识*/
int myMapDistance() {
printf("\n--------------------------------------平面图距离图开始--------------------------------------\n");
printf("\t\t河北科技大学新校区平面图(括号内为相对应的数字编号)\n\n");
printf(" 西北操场(1)—————30—————校医院(2)—————200—————文法学院(3)—————60—————风雨操场(4) \n");
printf(" | | | | \n");
printf(" 300 310 500 50 \n");
printf(" | | | | \n");
printf(" 西门(5)——————400—————牧星湖(6)—————100—————公教楼(7)—————200—————主体育场(8) \n");
printf(" | | | | \n");
printf(" 300 50 200 200 \n");
printf(" | | | | \n");
printf(" 第三餐厅(9)—————200————图书馆(10)—————200————讲堂群(11)——————400——————东门(12) \n");
printf(" | | | | \n");
printf(" 300 350 600 600 \n");
printf(" | | | | \n");
printf(" 研究生公寓(13)——300———工程训练中心(14)——300———南公教楼(15)————300————信息楼(16) \n\n\n");
printf("\n--------------------------------------平面图距离图结束------------------------------------\n");
return 0;
}
/*作用就是初始化数组内容,将建筑物的相关信息装载进去*/
int initData() {
int i, j; /*从41到73行,对平面图中的各个地点信息进行输入,运用strcpy函数*/
//向数组内装载数据
/*西北操场*/
constructions[1].number = 1;
strcpy(constructions[1].name, "西北操场");
strcpy(constructions[1].introduce, "学生运动,打篮、足球、排球、棒球的地方!(described by slience_me)\n");
/*校医院*/
constructions[2].number = 2;
strcpy(constructions[2].name, "校医院");
strcpy(constructions[2].introduce, "学生们,诊断看病的地方!(described by slience_me)\n");
/*文法学院*/
constructions[3].number = 3;
strcpy(constructions[3].name, "文法学院");
strcpy(constructions[3].introduce, "文法相关专业学生上专业课的地方!(described by slience_me)\n");
/*风雨操场*/
constructions[4].number = 4;
strcpy(constructions[4].name, "风雨操场");
strcpy(constructions[4].introduce, "科大唯一的室内运动场,内含篮球场,羽毛球场等场地!(described by slience_me)\n");
/*西门*/
constructions[5].number = 5;
strcpy(constructions[5].name, "西门");
strcpy(constructions[5].introduce, "这里是学校的西边出口,西大门!(described by slience_me)\n");
/*牧星湖*/
constructions[6].number = 6;
strcpy(constructions[6].name, "牧星湖");
strcpy(constructions[6].introduce, "科大学子,在闲暇之余,用来欣赏风景的地方,这里有山有水有瀑布!(described by slience_me)\n");
/*公教楼*/
constructions[7].number = 7;
strcpy(constructions[7].name, "公教楼");
strcpy(constructions[7].introduce, "科大学子,用来上公共课的地方!大的地方!(described by slience_me)\n");
/*主体育场*/
constructions[8].number = 8;
strcpy(constructions[8].name, "主体育场");
strcpy(constructions[8].introduce, "科大最主要的体育场,重大活动的场地,体育课,打球,运动的地方!(described by slience_me)\n");
/*第三餐厅*/
constructions[9].number = 9;
strcpy(constructions[9].name, "第三餐厅");
strcpy(constructions[9].introduce, "学生第三食堂,主供新宿舍区域的食物供给!(described by slience_me)\n");
/*图书馆*/
constructions[10].number = 10;
strcpy(constructions[10].name, "图书馆");
strcpy(constructions[10].introduce, "科大学子上自习备考,借阅图书的地方!十年图书馆必辉煌!(described by slience_me)\n");
/*讲堂群*/
constructions[11].number = 11;
strcpy(constructions[11].name, "讲堂群");
strcpy(constructions[11].introduce, "属于科大公共课最大的教室场地,一般用来举办讲座活动!(described by slience_me)\n");
/*东门*/
constructions[12].number = 12;
strcpy(constructions[12].name, "东门");
strcpy(constructions[12].introduce, "科大的最东侧出口,也是科大的正门!(described by slience_me)\n");
/*研究生公寓*/
constructions[13].number = 13;
strcpy(constructions[13].name, "研究生公寓");
strcpy(constructions[13].introduce, "研究生居住的宿舍!(described by slience_me)\n");
/*工程训练中心*/
constructions[14].number = 14;
strcpy(constructions[14].name, "工程训练中心");
strcpy(constructions[14].introduce, "学生们进行金工实习,做实验的地方,内有各种仪器!(described by slience_me)\n");
/*南公教楼*/
constructions[15].number = 15;
strcpy(constructions[15].name, "南公教楼");
strcpy(constructions[15].introduce, "仅次于公教楼的第二个公共课开展场地!(described by slience_me)\n");
/*信息楼*/
constructions[16].number = 16;
strcpy(constructions[16].name, "信息楼");
strcpy(constructions[16].introduce, "信息学子学习生活的场所!(described by slience_me)\n");
/*对存储距离的距离矩阵取值进行初始化,全定义为最大*/
for (i = 1; i > i;
printf("--------------------------------------菜单结束--------------------------------------\n");
return i;
}
/*输出简介函数*/
int information() {
int i;
while (true) {
printf("请输入查询地点的编号:");
cin >> i;
printf("\n--------------------------------------介绍开始--------------------------------------\n");
if (i = 1) {
printf("\n\t@名称:%s\n\t#简介:%s\n", constructions[i].name, constructions[i].introduce);
return 0;
} else {
printf("输入有误!");
}
printf("\n--------------------------------------介绍结束--------------------------------------\n");
}
return 0;
}
/*输出全部简介函数*/
int informationAll() {
printf("\n--------------------------------------全部简介开始--------------------------------------\n");
for (int i = 1; i < Num; i++) {
printf("\n\t@名称:%s\n\t#简介:%s\n", constructions[i].name, constructions[i].introduce);
}
printf("\n--------------------------------------全部简介结束--------------------------------------\n");
return 0;
}
/*小彩蛋神龙*/
int fun() {
cout << "\n\t111111111111111111111111111111111111111111111110000111111111111111111111111111111111111111111\n"
"\t111111111111111111111111111111111111111111111000011111111111111111111111111111111111111111111\n"
"\t111111111111111111111111111111111111111111100000011111111111111111111111111111111111111111111\n"
"\t111111111111111111111111111111111111111110000001111000110000000000000001111111111111111111111\n"
"\t111111111111111111111111111111110000000000000000000000000000000001111111111111111111111111111\n"
"\t111111111111111111111111111111011100000000000000000000000000001111111111111111111111111111111\n"
"\t111111111111111111111111111111111111100000000000000000000000000000000011111111111111111111111\n"
"\t111111111111111111111111111111111000000000000000000000000000000011111111111111111111111111111\n"
"\t111111111111111111111111111111110001110000000000000000000000000000011111111111111111111111111\n"
"\t111111111111111111111111111110000011000000000001100000000000000000001111111111111111111111111\n"
"\t111111111111111111111111111100000000000000010011110000000000000110000011111111111111111111111\n"
"\t111111111111111111111111000000000000000000111011111000000000000011100001111111111111111111111\n"
"\t111111111111111111111100000000000000000001111111110000000000000001111000111111111111111111111\n"
"\t111111111111111111111000000001111111111111111111110000000000000000111110011111111111111111111\n"
"\t111111111111111111111100000111111111111111111111000000000000000000111111111111111111111111111\n"
"\t111111111111111111111111011111111111111111110000000000000000000000011111111111111111111111111\n"
"\t111111111111111111111111111111000000000000000000000000000000000000011111111111111111111111111\n"
"\t111111111111111111111111111111110000000000000000000000000000110000011111111111111111111111111\n"
"\t111111111111111111111111111100000000000000000000000000000011110000011111111111111111111111111\n"
"\t111111111111111111111111100000000000000000000000000000000111111000011111111111111111111111111\n"
"\t111111111111111111111110000000000000000000000000000000111111111000011111111111111111111111111\n"
"\t111111111111111111111000000000000000000000000000000011111111111000011111111111111111111111111\n"
"\t111111111111111111110000000000000000000111000000111111111111111000111111111111111111111111111\n"
"\t111111111111111111100000000000000001111111111111111111111111111001111111111111111111111111111\n"
"\t111111111111111111000000000000000111111111111111110011111111111111111111111111111111111111111\n"
"\t111111111111111110000000000000001111111111111111111110000111111111111111111111111111111111111\n"
"\t111111111111111110000000000100011111111111111111111111100000111111111111111111111111111111111\n"
"\t111111111111111100000000000110011111111111111111111111111000000011111111111111111111111111111\n"
"\t111111111111111100000000000011101111111111110001111100001110000000111111111111111111111111111\n"
"\t111111111111111100000000000001111111111111111100011111000000000000001111111111111111111111111\n"
"\t111111111111111100000000000000001111111111111100000000000000000000000011111111111111111111111\n"
"\t111111111111111100100000000000000000111111111000000000000000000000000000111111111111111111111\n"
"\t111111111111111110011000000000000111111111000000000000000011100000000000011111111111111111111\n"
"\t111111111111111111011000000000000000000000000000000000011111111111000000001111111111111111111\n"
"\t111111111111111111111000000000000000000000000000000000111111111111110000000111111111111111111\n"
"\t111111111111111111111000001000000000000000000110000000011101111111111000000111111111111111111\n"
"\t111111111111111111111100011111000000000000011111000000000011111111111011000011111111111111111\n"
"\t111111111111111111111000111111110001000000000111110000011111111111111111000011111111111111111\n"
"\t111111111111111111111000111111111111111000000011111110000000011111111111100011111111111111111\n"
"\t111111111111111111111100111111111111111111100000011111111111111111111111110001111111111111111\n"
"\t- ------------------------------ 神龙保佑,永无BUG --------------------------------- -\n";
return 0;
}
/*弗洛伊德算法*/
int floyd() {
int i = 1, j = 1, k = 1, l = 1;
for (i = 1; i (shortest[i][k] + shortest[k][j])) {
shortest[i][j] = (shortest[i][k] + shortest[k][j]);
path[i][j] = path[j][i] = k;
}
}
}
}
return 0;
}
/*最短路径的输出*/
int way(int i, int j) {
int k = 0, a = i, b = j;
if (shortest[i][j] != Maxedge) {
printf("\n从 (%s) 到 (%s) 的最短路径为:\n", constructions[i].name, constructions[j].name);
printf("(%s)", constructions[i].name);
while (path[i][j] != 0) {
k = path[i][j];
while (path[i][k] != 0) {
k = path[i][k];
}
printf("-->(%s)", constructions[k].name);
i = k;
}
printf("-->(%s);\n", constructions[j].name);
printf("\n最短距离为:(%d)米。\n", shortest[a][b]);
printf("\n数据均为测试数据,与实际有误差,敬请谅解.\n\n");
} else
printf("从%s不能到达%s。", constructions[i].name, constructions[j].name);
return 0;
}
/*寻找最短路径*/
int shortestpath() {
int i = 0, j = 0;
while (true) {
printf("请输入要查询的两点的编号:(以空格间隔): ");
cin >> i >> j;
if (i 0 && j 0) {
floyd();
way(i, j);
return 0;
}
}
return 0;
}
int main() {
char i;
printf("\n----------------------------------------------------------------------------\n");
printf("\t\t\t欢迎使用河北科技大学新校区导航系统\n\n");
initData();
myMap();/*输出地图,提示使用者*/
while (true) {
i = menu();
switch (i) {
case 's':
shortestpath();
break;
case 'i':
information();
break;
case 'a':
informationAll();
break;
case 'd':
myMapDistance();
break;
case 'c':
fun();
break;
case 'q':
printf("\n\n\n\t\t\t\t谢谢使用!\n");
return (0);
default :
printf("输入错误!\n");
break;
}
}
return 0;
}
Original: https://www.cnblogs.com/Slience-me/p/16341906.html
Author: Slience_me
Title: 【河北科技大学数据结构课设】校园导航问题
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585853/
转载文章受原作者版权保护。转载请注明原作者出处!