校园导游咨询(图的应用)

校园导游咨询(图的应用)

[问题描述]

设计一个校园导游程序,为来访的客人提供各种信息查询服务。

(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息;

(2)提供基本信息的修改功能;

(3)为来访客人提供图中任意景点相关信息的查询;

(4)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。

分析:Floyd算法求最短路径,并保存路径。

源码:

#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include<cstring>
#include<stack>
#include<queue>
#include<algorithm>
#include<math.h>
#include<vector>
#include<iomanip>
#include<map>
using namespace std;
#define MX 9999999
const int N = 11;
int path[N][N], d[N];

struct node
{
	int daihao;
	string name;
	string jianjie;
}s1,s2;
node add[N]=
{
	{ 1, "国际教育学院教学楼", "此栋教学楼为中工国际教育学院专属教学楼,与国外合作办学。同时内设考研自习室,提供了良好的学习氛围。" },
	{ 2, "北苑篮球场", "它是北苑学生休闲活动的场所之一,除篮球场外还设有排球与网球场地,但因其地势低洼,故又被称做“北大坑”。" },
	{ 3, "北苑餐厅", "北苑餐厅共设有三层,提供了来自全国各地的美食,价格设置合理,饭菜管饱,满足了广大师生的需求。" },
	{ 4, "大学生活动中心", "活动中心共有五层,内设有乒乓球,篮球,羽毛球等场地,方便休闲,同时也是重大典礼举办的场所,能够容纳数万人,雄伟壮观。" },
	{ 5, "中心操场", "中心操场设有塑胶跑道与露天网球场,常有同学来此晨练,此外校庆汇演等重大活动也在此开展,有着“中心操场”的美誉。" },
	{ 6, "图书馆", "图书馆收纳了各个专业的相关书籍,是名副其实的“书的海洋”,提供了丰富的学习资源,也是中工最宏伟的建筑,没有之一。" },
	{ 7, "紫薇广场", "紫薇广场是社团活动与招聘会的举办点,每当节日,紫薇广场上必定热闹非凡,是各大社团的活动场所。" },
	{ 8, "教学楼群", "它聚集了8,9,10,11号教学楼,是各大学院的办公场所所在地,同时也是各个实验室的汇聚之地,学术氛围浓厚。" },
	{ 9, "南苑操场", "南苑操场供生活在南苑的学子们活动的场所,同时设有锻炼器材与篮球场,极大地方便了同学们的生活。" },
	{ 10,"南苑餐厅","南苑餐厅共设三层,环境优美,食物可口,满足广大师生,而且价格合理。"},
	{ 11, "工业实训基地", "基地位于中工的最南面,提供各大机床以便学生实训,是学生们实践实训的绝佳场所。" }
};
int w[N][N] =
{
	{ 0, 10, 10, 40, 40, MX, MX, MX, MX, MX ,MX},
	{ 10, 0, 15, 30, MX, MX, MX, MX, MX, MX ,MX},
	{ 10, 15, 0, MX, 30, MX, MX, MX, MX, MX ,MX},
	{ 40, 30, MX, 0, 2, MX, MX, MX, MX, MX ,MX},
	{ 40, MX, 30, 2, 0, 20, MX, MX, MX, MX ,MX},
	{ MX, MX, MX, MX, 20, 0, 25, 30, MX, MX ,MX},
	{ MX, MX, MX, MX, MX, 25, 0, 20, MX, MX ,MX},
	{ MX, MX, MX, MX, MX, 30, 20, 0, 15, 30 ,40},
	{ MX, MX, MX, MX, MX, MX, MX, 15, 0, 20 ,20},
	{ MX, MX, MX, MX, MX, MX, MX, 30, 20, 0, 15},
	{ MX, MX, MX, MX, MX, MX, MX, 40, 20, 15, 0}
};

void Floyd()
{//Floyd算法核心代码
	for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				path[i][j]=j;
	for(int k=0;k<N;k++)
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				if(w[i][j]>w[i][k]+w[k][j])
				{	
					w[i][j]=w[i][k]+w[k][j];
					path[i][j]=path[i][k];
				}
}
void Path(int st,int ed)
{
	int x=st;
	cout<<"路径: "<<add[x].name;
	while(x!=ed)
	{
		cout<<"-->"<<add[path[x][ed]].name;
		x=path[x][ed];
	}
	cout<<endl;
}
void ShortPath()
{
	int st,ed;
	cout<<"请输入起点和目的地(1~11空格隔开):"<<endl;
	cin>>st>>ed;
	if(st>=1&&st<=11&&ed>=1&&ed<=11)
	{
		cout<<" 从 "<<add[st-1].name<<" 到 "<<add[ed-1].name<<" :"<<endl;
		Floyd();
		Path(st-1,ed-1);
		cout<<"路径长度:"<<w[st-1][ed-1]*10<<" 米。"<<endl<<endl;
	}
	else
	{
		cout<<"输入的地方不存在!"<<endl;
	}
}
void find()
{
	int n_id;
	cout<<"请输入要查询景点的代号"<<endl;
	cin>>n_id;
	if(n_id>=1&&n_id<=11)
	{
		cout<<"代号:【"<<add[n_id-1].daihao<<"】"<<endl
			<<"名称:"<<add[n_id-1].name<<endl
			<<"简介:"<<add[n_id-1].jianjie<<endl
			<<"查询成功!=^_^="<<endl;
	}
	else
	{
		cout<<"输入有误!!!"<<endl;
	}
}
void xiugai()
{
	string mi;
	int st,ed,len;
	cout<<"请输入管理员密码";
	cin>>mi;
	if(mi=="123456")
	{
		cout<<"请输入要修改路径地点所连接地点编号(1~11空格隔开):";
		cin>>st>>ed;
		cout<<"请输入路径长度";cin>>len;
		w[st-1][ed-1]=w[ed-1][st-1]=len;
	}
	else
	{
		cout<<"Sorry,密码错误!^_^"<<endl;
	}
}
void exit()
{
	cout<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<endl;
	cout<<"           ◇              感谢使用=^_^=            ◇"<<endl;
	cout<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<endl;
}
void mp()
{
	cout << endl;
	cout << "     ★---------★---------★---------★---------★---------★---------★" << endl;
	cout << "                                【1】国际教育学院教学楼                    "<< endl;
	cout << "     ☆                           |                                    ☆" << endl;
	cout << "       【2】北苑篮球场<-----------|-------------------->【3】北苑餐厅    " << endl;
	cout << "     ☆                           |                                    ☆" << endl;
	cout << "                                  |                                      " << endl;
	cout << "     ☆【4】大学生活动中心<-----【5】中心操场                          ☆" << endl;
	cout << "                                  |                                      " << endl;
	cout << "     ☆          北               |                                    ☆" << endl;
	cout << "                  |             【6】图书馆                              " << endl;
	cout << "     ☆      西---|---东          |                                    ☆" << endl;
	cout << "                  |               |-------------------->【7】紫薇广场    " << endl;
	cout << "     ☆          南               |                                    ☆" << endl;
	cout << "                                【8】教学楼群                            " << endl;
	cout << "     ☆                           |                                    ☆" << endl;
	cout << "       【9】南苑操场<-------------|-------------------【10】南苑餐厅    " << endl;
	cout << "     ☆                           |                                    ☆" << endl;
	cout << "                                【11】工业实训基地                       " << endl;
	cout << "     ★---------★---------★---------★---------★---------★---------★" << endl;
	cout<<endl;
}
void menu()
{
	cout<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<"                        校园导游系统               "<<endl;
	cout<<"           ◇                                      ◇"<<endl;
	cout<<"                       1、中工导游图               "<<endl;
	cout<<"           ◇          2、景点信息查询(客人)     ◇"<<endl;
	cout<<"                       3、景点路径查询(客人)       "<<endl;
	cout<<"           ◇          4、导游图信息修改(管理员) ◇"<<endl;
	cout<<"                       5、退出系统                     "<<endl;
	cout<<"           ◇                                      ◇"<<endl;
	cout<<"                       中工师生欢迎你                "<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<endl<<endl<<"请选择功能:";
}

int main()
{
	system("color 37");
	int n;
	while(1)
	{
		system("cls");
		menu();
		cin>>n;
		if(n==1)
		{
			system("cls");
			mp();
			system("pause");
		}
		else if(n==2)
		{
			system("cls");
			mp();
			find();
			system("pause");
		}
		else if(n==3)
		{
			system("cls");
			mp();
			ShortPath();
			system("pause");
		}
		else if(n==4)	
		{
			system("cls");
			mp();
			xiugai();
			system("pause");
		}
		else if(n==5)
		{
			system("cls");
			exit();
			break;
		}
		else
		{
			cout<<"输入有误,请重新输入!"<<endl;
			system("pause");
			continue;
		} 
	}

	return 0;
}


  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值