根据题目内容,需要用无向网表示所在学校的景点平面图,即校内每个景点
为无向网中的各个结点,景点的编号、名称、简介等信息存储在结点中,图中的 边表示景点间的道路,存放景点之间的路径长度等信息。需要回答有关景点介绍、
游览路径等问题。具体要求为:
(1) 能够查询各个景点的相关信息。
(2) 查询图中任意两个景点间的最短路径。
(3) 查询图中任意两个景点间的所有路径。
(4) 增加、删除、更新有关景点和道路的信息。
选取10个代表性景点
实现代码
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
#include<string.h>
#include<algorithm>
#include<stack>
#define INF 9999999
#define MAX 30
int dist[MAX][MAX];///距离
int path[MAX][MAX];///路径
int Stack[MAX];///路径栈
int top;///栈顶
int counts;///记录路径数
typedef struct VexNode//景点信息结构体
{
int vertex;//景点编号
char name[20];//景点名称
char vertax_message[400];//景点介绍
}VerNode;
typedef struct maps//景点图的结构体
{
VerNode v[MAX];
int vexnum;//点数
int arcnum;//边数
int edgs[MAX][MAX];//邻接矩阵
}AdjList;
int visited[MAX];
void create_vertex(AdjList &GL);//初始化校园景点及景点信息函数
void Init_Creat_maps(AdjList & GL);//初始化校园景点图函数
void Dis_menu();//展示程序菜单
void Dis_map();//展示校园景点图
void add_message(AdjList &GL);//更新或添加或删除校园景点及路径信息函数
void find_message(AdjList GL);//查询景点信息函数
void Floyd(AdjList GL);//弗洛伊德求最短路径
void Floyd_print(int s, int e,AdjList GL);//打印最短路径
void Dfs_allpaths(int s,int e,AdjList GL);//查询两景点之间所有路径函数
void message(AdjList GL);//已有景点
int main()
{ AdjList graph;
int key;
int start,end;
create_vertex(graph);
Init_Creat_maps(graph);
while(1)
{
Dis_menu();
cin>>key;
if(key==1)
{
Dis_map();
find_message(graph);
system("pause");
system("cls");
}
if(key==2)
{
message(graph);
printf("请输入起点的景点(编号):\n");
scanf("%d",&start);
printf("请输入起点的终点(编号):\n");
scanf("%d",&end);
Floyd(graph);
printf("从%s到%s的最短路径是:%d米 ",graph.v[start].name,graph.v[end].name,dist[start][end]);
printf("%s->",graph.v[start].name);
Floyd_print(start,end,graph);
printf("%s\n",graph.v[end].name);
system("pause");
system("cls");
}
if(key==3)
{
message(graph);
printf("请输入起点的景点(编号):\n");
scanf("%d",&start);
printf("请输入起点的终点(编号):\n");
scanf("%d",&end);
counts=0;
top=0;
Dfs_allpaths(start,end,graph);
system("pause");
system("cls");
}
if(key==4)
{
message(graph);
add_message(graph);
system("pause");
system("cls");
}
if(key==0)
{
printf("使用结束!\n");
printf("即将退出安工程校园导游系统.....");
break;
}
if(key>4||key<0)
{
printf("输入有误!请重新输入!");
continue;
}
}
return 0;
}
void create_vertex(AdjList &GL)
{
//预置初始时景点图的景点信息
GL.v[1].vertex=1;
strcpy(GL.v[1].name,"网球场");
strcpy(GL.v[1].vertax_message,"网球场是安工程校园的一个户外运动场地,提供给师生们进行网球运动的场所。这里有专业的网球场地和设施,可以让你尽情享受网球运动的乐趣。");
GL.v[2].vertex=2;
strcpy(GL.v[2].name,"体育馆");
strcpy(GL.v[2].vertax_message,"体育馆是安工程校园内的一个综合性体育场馆,设有多个室内运动场地,如篮球场、羽毛球场、乒乓球场等。师生们可以在这里进行各种体育锻炼和比赛活动。");
GL.v[3].vertex=3;
strcpy(GL.v[3].name,"英语角");
strcpy(GL.v[3].vertax_message,"英语角是安工程校园内一个特殊的交流区域,提供给学生们练习英语口语和交流的场所。在这里,你可以与其他同学自由对话,提高自己的英语口语能力。");
GL.v[4].vertex=4;
strcpy(GL.v[4].name,"情人桥");
strcpy(GL.v[4].vertax_message,"情人桥是安工程校园内的一座浪漫的小桥,因其景色优美而得名。这里是情侣们约会和散步的热门地点,也是学生们放松心情的好去处。");
GL.v[5].vertex=5;
strcpy(GL.v[5].name,"师生活动中心");
strcpy(GL.v[5].vertax_message,"师生活动中心是安工程校园的一个集休闲、娱乐、学习于一体的场所。这里有图书馆、电影院、多功能厅等设施,为师生们提供了丰富多样的活动和学习资源。\n学生处、招生就业处、校团委、校史馆、校学生会联合会、校社团联合会、校大学生艺术团在此办公。");
GL.v[6].vertex=6;
strcpy(GL.v[6].name,"建设银行");
strcpy(GL.v[6].vertax_message,"建设银行是安工程校园内的一家银行分支机构,为师生们提供金融服务,包括存取款、贷款、理财等。方便师生们进行日常的金融交易和管理。");
GL.v[7].vertex=7;
strcpy(GL.v[7].name,"图书馆");
strcpy(GL.v[7].vertax_message,"图书馆是安工程校园内的知识殿堂,收藏了大量的