#include/** 注:步行速度为90m/min **/ #define INFINITY 65535 ///无穷大,即不相邻 #define MAX_VERTEX_NUM 20 ///最大的顶点个数 using namespace std; typedef int VRType; typedef char InfoType; typedef struct { int num; char name[20]; char introduce[100]; } VertexType; typedef struct ArcCell { VRType adj; ///距离 InfoType *info;///边的信息 } ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { VertexType vex[MAX_VERTEX_NUM];///顶点向量 AdjMatrix arcs; ///邻接矩阵 int vexnum,arcnum; ///顶点数和边数 } MGraph; VertexType site[11]= { {1,"生活区"," 一大群孩子的老巢"}, {2,"球场"," 锻炼身体、休闲娱乐的地方"}, {3,"风雨操场","情侣们秀恩爱的最佳去处"}, {4,"众创空间","集合广播台等高大尚的工作的地方"}, {5,"学苑超市","一个坑钱的地方,thing贼贵"}, {6,"浴室"," 让你出淤泥而不染的地方"}, {7,"知味园"," 小而拥挤、人流量te多还难吃的就餐地方"}, {8,"致知楼"," 结合上课和办公与一体的高端教学楼"}, {9,"敏行楼"," 夏天不热、冬天不冷的实验楼,也是报告厅所在地"}, {10,"图书馆"," 还在建设中,想进去都进不去"}, {11,"学校南门","学校正门,学校的门面,然而基本没开过"} }; /*****************************************************************************************************************/ /*****************************************************************************************************************/ /******* *******/ /******/ void schoolmap();///学校地图 /******/ /******* *******/ /******/ void menu();///菜单 /******/ /******* *******/ /******/ void create(MGraph &g,VertexType site[]);///创建邻接矩阵 /******/ /******* *******/ /******/ void output(MGraph g,int i);///根据序号i输出对应的地点的相关信息 /******/ /******* *******/ /******/ void search(MGraph g);///查找某个地点信息 /******/ /******* *******/ /******/ void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20]);///Dijkstra算法 /******/ /******* *******/ /******/ void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20]);///FLOYD算法 /******/ /******* *******/ /******/ void add_arc(MGraph &g);///增加修改地点间路径 /******/ /******* *******/ /******/ void delete_arc(MGraph &g);///删除某一条边 /******/ /******* *******/ /******/ void display_num(MGraph g);///显示所有地点序号名称 /******/ /******* *******/ /******/ void display_all(MGraph g);///输出具体信息 /******/ /******* *******/ /******/ void update(MGraph &g);///修改某一个地点信息 /******/ /******* *******/ /*****************************************************************************************************************/ /*****************************************************************************************************************/ int main() { int v1,v2,P1[20][20],P2[20][20][20],D1[20],D2[20][20],i,j,k; MGraph g; create(g,site); printf(" 欢迎来到安科地图导航! \n"); char admin[100]="admin",input[100];///用户名:admin char pass[100]="123456";///密码:123456 char en[100]; L: printf("请输入用户名: "); scanf("%s",input); printf("请输入密码: "); scanf("%s",&en); if(!strcmp(admin,input)&&!strcmp(en,pass)) ; else { printf("用户名/密码错误,请重新输入,嘤嘤嘤qwq\n"); goto L; } LL1: menu(); printf("please intput your choose:"); scanf("%d",&i); switch(i) { case 0: schoolmap(); goto LL1; break; case 1: display_num(g); goto LL1; break; case 2: display_all(g); goto LL1; break; case 3: search(g); goto LL1; break; case 4: printf("请输入地点的序号:\n"); scanf("%d",&k); Shortest_Path_Dijkstra(g,k-1,P1,D1); for(i=1; i=1&&i<=11) { printf("请输入新的地点名称:"); scanf("%s",g.vex[i-1].name); printf("请输入新的地点名称简介:"); scanf("%s",g.vex[i-1].introduce); } else printf("没有找到这个地方嘤嘤嘤qwq~\n"); } void add_arc(MGraph &g) { int v1,v2,n; printf("请输入你想增加的边两端的顶点序号:"); printf("请输入第一个顶点号:"); scanf("%d",&v1); printf("请输入第二个顶点号:"); scanf("%d",&v2); if(g.arcs[v1-1][v2-1].adj==INFINITY) { printf("请输入两点之间的距离:"); scanf("%d",&g.arcs[v1-1][v2-1].adj); g.arcs[v2-1][v1-1].adj=g.arcs[v1-1][v2-1].adj; printf("增加成功!嘤嘤嘤^_^\n"); } else { LL0: printf("这两点已经有路径存在了,你想要修改它吗?想的话请按1,不想请按2:\n"); scanf("%d",&n); if(n==1) { printf("请输入两点之间的新的距离:"); scanf("%d",&g.arcs[v1-1][v2-1].adj); g.arcs[v2-1][v1-1].adj=g.arcs[v1-1][v2-1].adj; printf("修改成功!嘤嘤嘤^-^\n"); } else if(n==2) { printf("增加失败,嘤嘤嘤T_T\n"); } else { printf("你的输入有误,请重新输入!嘤嘤嘤qwq\n"); goto LL0; } } } void delete_arc(MGraph &g) { int v1,v2; printf("请输入你想删除的边两端的顶点序号:\n"); printf("请输入第一个顶点号:\n"); scanf("%d",&v1); printf("请输入第二个顶点号:\n"); scanf("%d",&v2); if(g.arcs[v1-1][v2-1].adj!=INFINITY) { g.arcs[v1-1][v2-1].adj=g.arcs[v2-1][v1-1].adj=INFINITY; printf("删除成功!嘤嘤嘤^_^\n"); } else printf("删除失败!这两个点之间本来就没有直接通路,你还删它干嘛?!嘤嘤嘤qwq\n"); } void display_num(MGraph g) { int i; printf("<地点序号> <地点名称>\n"); for(i=0; i <地点名称> <地点简介>\n"); for(i=0; i