|
@@ -1,36 +1,344 @@
|
|
|
-/** 注:步行速度为90m/min **/
|
|
|
-#include <iostream>
|
|
|
-#include <stdio.h>
|
|
|
-#include <string.h>
|
|
|
-#include <iomanip>
|
|
|
-#include <stdlib.h>
|
|
|
-#include <math.h>
|
|
|
-#define INFINITY 65535 ///无穷大,即不相邻
|
|
|
+#include<bits/stdc++.h>/** 注:步行速度为90m/min **/
|
|
|
+#include "stdio.h"
|
|
|
+#include "string.h"
|
|
|
+#include "windows.h"
|
|
|
+#define INFINITY 99999 ///无穷大,即不相邻
|
|
|
#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; ///邻接矩阵
|
|
|
+ AdjMatrix arcs; ///邻接矩阵#include<conio.h>
|
|
|
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);///修改某一个地点信息 /******/
|
|
|
+/******* *******/
|
|
|
+/*****************************************************************************************************************/
|
|
|
+/*****************************************************************************************************************/
|
|
|
+char reg_name[30]="",reg_pwd[10]="";
|
|
|
+char on_name[30],on_pwd[10];
|
|
|
+//用户注册系统
|
|
|
+void regist()
|
|
|
+{
|
|
|
+ system("pause");//清屏
|
|
|
+ system("cls");
|
|
|
+ printf("\n\n\t\t\t欢迎使用安科地图导航注册系统\n\n");
|
|
|
+ while(1)
|
|
|
+ {
|
|
|
+ //输入用户名
|
|
|
+ printf("\t\t请输入用户名:");
|
|
|
+ scanf("%s",reg_name);
|
|
|
+
|
|
|
+ //判断用户名
|
|
|
+ if(strlen(reg_name))
|
|
|
+ {
|
|
|
+ while(1)
|
|
|
+ {
|
|
|
+ //输入密码
|
|
|
+ printf("\n\t\t请输入密码:");
|
|
|
+ scanf("%s",reg_pwd);
|
|
|
+
|
|
|
+ //判断密码
|
|
|
+ if(strlen(reg_pwd))
|
|
|
+ {
|
|
|
+ printf("\n\n\t\t注册成功,您的用户名是%s,密码是%s\n\n",reg_name,reg_pwd);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("\n\t\t密码的长度为%d,请重新输入\n",strlen(reg_pwd));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("\n\t\t用户名的长度为%d,请重新输入\n\n",strlen(reg_name));
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//判断是否注册
|
|
|
+int judge()
|
|
|
+{
|
|
|
+ system("pause");//清屏
|
|
|
+ system("cls");
|
|
|
+ if(strcmp(reg_name,"")==0&&strcmp(reg_pwd,"")==0)
|
|
|
+ {
|
|
|
+ printf("\n\n\t\t您尚未注册,请先注册!\n\n");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//用户登录
|
|
|
+void dl()
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+
|
|
|
+ printf("\n\n\t\t\t欢迎使用安科地图导航登录系统\n\n");
|
|
|
+ //三次登录验证
|
|
|
+ for(i=1; i<=3; i++)
|
|
|
+ {
|
|
|
+ printf("\t\t请输入用户名:");
|
|
|
+ scanf("%s",on_name);
|
|
|
+ printf("\n\t\t请输入密 码:");
|
|
|
+ scanf("%s",on_pwd);
|
|
|
+ if(strcmp(reg_name,on_name)==0&&strcmp(reg_pwd,on_pwd)==0)
|
|
|
+ {
|
|
|
+ printf("\n\n\t\t登录成功,欢迎使用安科地图导航系统\n\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("\n\n\t\t登录失败,请重新登录\n\n");
|
|
|
+ return dl();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+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);
|
|
|
+ int id;
|
|
|
+ while(1)
|
|
|
+ {
|
|
|
+
|
|
|
+ //输出界面
|
|
|
+ printf("\n\n\t\t\t安科地图导航管理系统\n\n");
|
|
|
+ printf("\t\t\t1:注册\n");
|
|
|
+ printf("\t\t\t2:登录\n");
|
|
|
+ printf("\t\t\t0:退出\n\n");
|
|
|
+ //输入功能编号
|
|
|
+ printf("\t\t请选择功能编号:");
|
|
|
+ scanf("%d",&id);
|
|
|
+
|
|
|
+ //判断
|
|
|
+ switch(id)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ regist();
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ if(judge()==1)
|
|
|
+ {
|
|
|
+ dl();
|
|
|
+ goto LL1;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 0:
|
|
|
+ printf("下次再来玩呦,嘤嘤嘤^_^!\n");
|
|
|
+ exit(1);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printf("\n\t\t您输入的功能编号有误,请重新输入!\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+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); for(int xx=0;xx<g.vexnum;xx++){
|
|
|
+ for(int yy=0;yy<g.vexnum;yy++)
|
|
|
+ printf("%7d",g.arcs[xx][yy]);
|
|
|
+ printf("\n");
|
|
|
+ }
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ search(g);
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ T: printf("请输入地点的序号:\n");
|
|
|
+ scanf("%d",&k);
|
|
|
+ if(k<1||k>11) {printf("不存在该地点!");goto T;}
|
|
|
+ Shortest_Path_Dijkstra(g,k-1,P1,D1);
|
|
|
+ for(i=1; i<g.vexnum; i++)
|
|
|
+ {
|
|
|
+ printf("%d号(%s)到%d号(%s):",k,g.vex[k-1].name,i+1,g.vex[i].name);
|
|
|
+ for(j=0; P1[i][j]!=-1; j++)
|
|
|
+ printf("%d号(%s) ",P1[i][j]+1,g.vex[P1[i][j]].name);
|
|
|
+ printf("\n距离为:%d\n",D1[i]);
|
|
|
+ puts("");
|
|
|
+ }
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ ShortestPath_FLOYD(g,P2,D2);
|
|
|
+ for(i=0; i<g.vexnum; i++)
|
|
|
+ {
|
|
|
+ for(int j=0; j<g.vexnum; j++)
|
|
|
+ {
|
|
|
+ if(i!=j)
|
|
|
+ {
|
|
|
+ if(D2[i][j]!=INFINITY)
|
|
|
+ {
|
|
|
+ cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"的最短时间为:"<<setw(5)<<D2[i][j]/90<<"min"<<", 最短路径为:";
|
|
|
+ for(int k=0; k<g.vexnum; k++)
|
|
|
+ {
|
|
|
+ if(P2[i][j][k]!=-1)
|
|
|
+ cout<<g.vex[P2[i][j][k]].name<<" ";
|
|
|
+ else
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ puts("");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"不可达"<<endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ puts("");
|
|
|
+ }
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ ShortestPath_FLOYD(g,P2,D2);
|
|
|
+ for(i=0; i<g.vexnum; i++)
|
|
|
+ {
|
|
|
+ for(int j=0; j<g.vexnum; j++)
|
|
|
+ {
|
|
|
+ if(i!=j)
|
|
|
+ {
|
|
|
+ if(D2[i][j]!=INFINITY)
|
|
|
+ {
|
|
|
+ cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"的最短长度为:"<<setw(5)<<D2[i][j]<<", 最短路径为:";
|
|
|
+ for(int k=0; k<g.vexnum; k++)
|
|
|
+ {
|
|
|
+ if(P2[i][j][k]!=-1)
|
|
|
+ cout<<g.vex[P2[i][j][k]].name<<" ";
|
|
|
+ else
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ puts("");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"不可达"<<endl;
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+ puts("");
|
|
|
+ }
|
|
|
+ goto LL1; for(int xx=0;xx<g.vexnum;xx++){
|
|
|
+ for(int yy=0;yy<g.vexnum;yy++)
|
|
|
+ printf("%7d",g.arcs[xx][yy]);
|
|
|
+ printf("\n");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ add_arc(g);
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ delete_arc(g);
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ update(g);
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
+ printf("下次再来玩呦,嘤嘤嘤^_^!\n");
|
|
|
+ exit(0);
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printf("你的输入有误,请重新输入!嘤嘤嘤qwq\n");
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+void menu()
|
|
|
+{
|
|
|
+ printf("************************************************************\n");
|
|
|
+ printf("************************************************************\n");
|
|
|
+ printf("*** 0.大安科全景地图 ***\n");
|
|
|
+ printf("*** 1.显示所有地点的序号 ***\n");
|
|
|
+ printf("*** 2.查询所有地点的信息 ***\n");
|
|
|
+ printf("*** 3.查询某个地点的具体信息 ***\n");
|
|
|
+ printf("*** 4.查询某个地点到其他地点的最短路径 ***\n");
|
|
|
+ printf("*** 5.输出任意两个地点之间的最短路径 ***\n");
|
|
|
+ printf("*** 6.输出任意两个地点之间的最短时间 ***\n");
|
|
|
+ printf("*** 7.增加某一条边 ***\n");
|
|
|
+ printf("*** 8.删除某一条边 ***\n");
|
|
|
+ printf("*** 9.修改某个地点的具体信息 ***\n");
|
|
|
+ printf("*** 10.退出系统 ***\n");
|
|
|
+ printf("************************************************************\n");
|
|
|
+ printf("************************************************************\n");
|
|
|
+}
|
|
|
void schoolmap()
|
|
|
{
|
|
|
printf(" 安科平面图 \n");
|
|
@@ -94,40 +402,40 @@ void create(MGraph &g,VertexType site[])
|
|
|
for(i=0; i<g.vexnum; i++)
|
|
|
for(j=0; j<g.vexnum; j++)
|
|
|
g.arcs[i][j]= {INFINITY,NULL};
|
|
|
- g.arcs[0][1].adj=200;
|
|
|
- g.arcs[1][2].adj=150;
|
|
|
- g.arcs[2][3].adj=50;
|
|
|
- g.arcs[3][4].adj=100;
|
|
|
- g.arcs[4][5].adj=50;
|
|
|
- g.arcs[5][9].adj=300;
|
|
|
- g.arcs[6][7].adj=450;
|
|
|
- g.arcs[6][9].adj=500;
|
|
|
- g.arcs[0][4].adj=300;
|
|
|
- g.arcs[0][7].adj=250;
|
|
|
- g.arcs[9][10].adj=700;
|
|
|
- g.arcs[7][8].adj=20;
|
|
|
+ g.arcs[0][1].adj=150;
|
|
|
+ g.arcs[1][2].adj=100;
|
|
|
+ g.arcs[2][3].adj=141;
|
|
|
+ g.arcs[3][4].adj=30;
|
|
|
+ g.arcs[4][5].adj=30;
|
|
|
+ g.arcs[5][9].adj=300;for(int xx=0;xx<g.vexnum;xx++)
|
|
|
+ g.arcs[5][10].adj=410;
|
|
|
+ g.arcs[6][7].adj=210;
|
|
|
+ g.arcs[6][9].adj=180;
|
|
|
+ g.arcs[0][4].adj=160;
|
|
|
+ g.arcs[0][7].adj=400;
|
|
|
+ g.arcs[9][10].adj=310;
|
|
|
+ g.arcs[7][8].adj=190;
|
|
|
for(i=0; i<g.vexnum; i++)
|
|
|
for(j=0; j<g.vexnum; j++)
|
|
|
g.arcs[j][i].adj= g.arcs[i][j].adj;
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
-void output(MGraph g,int i)///根据序号i输出对应的地点的相关信息
|
|
|
+void output(MGraph g,int i)///输出地点信息
|
|
|
{
|
|
|
printf("地点序号:%d\n",i);
|
|
|
printf("地点名称:%s\n",g.vex[i-1].name);
|
|
|
printf("地点简介:%s\n",g.vex[i-1].introduce);
|
|
|
}
|
|
|
-
|
|
|
-void search(MGraph g)
|
|
|
+void search(MGraph g)///查找某个地点信息
|
|
|
{
|
|
|
int i;
|
|
|
printf("请输入你想查找地点的序号:");
|
|
|
scanf("%d",&i);
|
|
|
- output(g,i);
|
|
|
+ if(i<1||i>11)
|
|
|
+ {printf("请重新输入!\n"); search(g);}
|
|
|
+ else if(i<12)
|
|
|
+ {output(g,i);}
|
|
|
}
|
|
|
-
|
|
|
-void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20])
|
|
|
+void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20])///最短路径算法
|
|
|
{
|
|
|
int v,w,i,j,final[20],min;
|
|
|
for(v=0; v<g.vexnum; v++)
|
|
@@ -170,8 +478,7 @@ void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20])
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20])
|
|
|
+void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20])///最短路径算法
|
|
|
{
|
|
|
int u,v,w,i,j;
|
|
|
for(v=0; v<g.vexnum; v++)
|
|
@@ -213,8 +520,7 @@ void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20])
|
|
|
}
|
|
|
|
|
|
}
|
|
|
-
|
|
|
-void update(MGraph &g)
|
|
|
+void update(MGraph &g)///修改某个具体信息
|
|
|
{
|
|
|
int i;
|
|
|
printf("请输入你想查找的地点的序号:");
|
|
@@ -226,9 +532,9 @@ void update(MGraph &g)
|
|
|
printf("请输入新的地点名称简介:");
|
|
|
scanf("%s",g.vex[i-1].introduce);
|
|
|
}
|
|
|
+ else printf("没有找到这个地方嘤嘤嘤qwq~\n");
|
|
|
}
|
|
|
-
|
|
|
-void add_arc(MGraph &g)
|
|
|
+void add_arc(MGraph &g)///增加某一条边
|
|
|
{
|
|
|
int v1,v2,n;
|
|
|
printf("请输入你想增加的边两端的顶点序号:");
|
|
@@ -265,9 +571,13 @@ LL0:
|
|
|
goto LL0;
|
|
|
}
|
|
|
}
|
|
|
+ for(int xx=0;xx<g.vexnum;xx++){
|
|
|
+ for(int yy=0;yy<g.vexnum;yy++)
|
|
|
+ printf("%7d",g.arcs[xx][yy]);
|
|
|
+ printf("\n");
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-void delete_arc(MGraph &g)
|
|
|
+void delete_arc(MGraph &g)///删除某一条边
|
|
|
{
|
|
|
int v1,v2;
|
|
|
printf("请输入你想删除的边两端的顶点序号:\n");
|
|
@@ -281,183 +591,21 @@ void delete_arc(MGraph &g)
|
|
|
printf("删除成功!嘤嘤嘤^_^\n");
|
|
|
}
|
|
|
else
|
|
|
- {
|
|
|
printf("删除失败!这两个点之间本来就没有直接通路,你还删它干嘛?!嘤嘤嘤qwq\n");
|
|
|
- }
|
|
|
}
|
|
|
-
|
|
|
-void display_num(MGraph g)
|
|
|
+void display_num(MGraph g)///输出所有地点序号名称
|
|
|
{
|
|
|
int i;
|
|
|
printf("<地点序号> <地点名称>\n");
|
|
|
for(i=0; i<g.vexnum; i++)
|
|
|
- {
|
|
|
printf("%5d %s\n",g.vex[i].num,g.vex[i].name);
|
|
|
- }
|
|
|
}
|
|
|
-
|
|
|
-void display_all(MGraph g)
|
|
|
+void display_all(MGraph g)///输出具体信息
|
|
|
{
|
|
|
int i;
|
|
|
printf("<地点序号> <地点名称> <地点简介>\n");
|
|
|
for(i=0; i<g.vexnum; i++)
|
|
|
{
|
|
|
- printf("%5d %s %s\n",g.vex[i].num,g.vex[i].name,g.vex[i].introduce);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void menu()
|
|
|
-{
|
|
|
- printf("\n************************************************************\n");
|
|
|
- printf("*** 0.大安科全景地图 ***\n");
|
|
|
- printf("*** 1.显示所有地点的序号 ***\n");
|
|
|
- printf("*** 2.查询所有地点的信息 ***\n");
|
|
|
- printf("*** 3.查询某个地点的具体信息 ***\n");
|
|
|
- printf("*** 4.查询某个地点到其他地点的最短路径 ***\n");
|
|
|
- printf("*** 5.输出任意两个地点之间的最短路径 ***\n");
|
|
|
- printf("*** 6.输出任意两个地点之间的最短时间 ***\n");
|
|
|
- printf("*** 7.增加某一条边 ***\n");
|
|
|
- printf("*** 8.删除某一条边 ***\n");
|
|
|
- printf("*** 9.修改某一条边 ***\n");
|
|
|
- printf("*** 10.退出系统 ***\n");
|
|
|
- printf("************************************************************\n");
|
|
|
-}
|
|
|
-
|
|
|
-int main()
|
|
|
-{
|
|
|
- int v1,v2,P1[20][20],P2[20][20][20],D1[20],D2[20][20],i,j,k;
|
|
|
- MGraph g;
|
|
|
- VertexType site[11]=
|
|
|
- {
|
|
|
- {1,"生活区"," 一大群孩子的老巢"},
|
|
|
- {2,"球场"," 锻炼身体、休闲娱乐的地方"},
|
|
|
- {3,"风雨操场","情侣们秀恩爱的最佳去处"},
|
|
|
- {4,"众创空间","集合广播台等高大尚的工作的地方"},
|
|
|
- {5,"学苑超市","一个坑钱的地方,thing贼贵"},
|
|
|
- {6,"浴室"," 让你出淤泥而不染的地方"},
|
|
|
- {7,"知味园"," 小而拥挤、人流量te多还难吃的就餐地方"},
|
|
|
- {8,"致知楼"," 结合上课和办公与一体的高端教学楼"},
|
|
|
- {9,"敏行楼"," 夏天不热、冬天不冷的实验楼,也是报告厅所在地"},
|
|
|
- {10,"图书馆"," 还在建设中,想进去都进不去"},
|
|
|
- {11,"学校南门","学校正门,学校的门面,然而基本没开过"}
|
|
|
- };
|
|
|
-
|
|
|
- create(g,site);
|
|
|
- printf(" 欢迎来到安科地图导航! \n");
|
|
|
-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<g.vexnum; i++)
|
|
|
- {
|
|
|
- printf("%d号(%s)到%d号(%s):",k,g.vex[k-1].name,i+1,g.vex[i].name);
|
|
|
- for(j=0; P1[i][j]!=-1; j++)
|
|
|
- printf("%d号(%s) ",P1[i][j]+1,g.vex[P1[i][j]].name);
|
|
|
- printf("\n距离为:%d\n",D1[i]);
|
|
|
- puts("");
|
|
|
- }
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- ShortestPath_FLOYD(g,P2,D2);
|
|
|
- for(i=0; i<g.vexnum; i++)
|
|
|
- {
|
|
|
- for(int j=0; j<g.vexnum; j++)
|
|
|
- {
|
|
|
- if(i!=j)
|
|
|
- {
|
|
|
- if(D2[i][j]!=INFINITY)
|
|
|
- {
|
|
|
- cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"的最短时间为:"<<setw(5)<<D2[i][j]/90<<"min"<<", 最短路径为:";
|
|
|
- for(int k=0; k<g.vexnum; k++)
|
|
|
- {
|
|
|
- if(P2[i][j][k]!=-1)
|
|
|
- cout<<g.vex[P2[i][j][k]].name<<" ";
|
|
|
- else
|
|
|
- break;
|
|
|
- }
|
|
|
- puts("");
|
|
|
- }
|
|
|
- else
|
|
|
- cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"不可达"<<endl;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- puts("");
|
|
|
- }
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- ShortestPath_FLOYD(g,P2,D2);
|
|
|
- for(i=0; i<g.vexnum; i++)
|
|
|
- {
|
|
|
- for(int j=0; j<g.vexnum; j++)
|
|
|
- {
|
|
|
- if(i!=j)
|
|
|
- {
|
|
|
- if(D2[i][j]!=INFINITY)
|
|
|
- {
|
|
|
- cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"的最短长度为:"<<setw(5)<<D2[i][j]<<", 最短路径为:";
|
|
|
- for(int k=0; k<g.vexnum; k++)
|
|
|
- {
|
|
|
- if(P2[i][j][k]!=-1)
|
|
|
- cout<<g.vex[P2[i][j][k]].name<<" ";
|
|
|
- else
|
|
|
- break;
|
|
|
- }
|
|
|
- puts("");
|
|
|
- }
|
|
|
- else
|
|
|
- cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"不可达"<<endl;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- puts("");
|
|
|
- }
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- add_arc(g);
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
- case 8:
|
|
|
- delete_arc(g);
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
- case 9:
|
|
|
- update(g);
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- printf("下次再来玩呦,嘤嘤嘤^_^!\n");
|
|
|
- exit(0);
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
- default:
|
|
|
- printf("你的输入有误,请重新输入!嘤嘤嘤qwq\n");
|
|
|
- goto LL1;
|
|
|
- break;
|
|
|
+ printf("%5d %s %s\n",g.vex[i].num,g.vex[i].name,g.vex[i].introduce);
|
|
|
}
|
|
|
}
|