|
@@ -11,7 +11,6 @@
|
|
|
2.区分机动车道和人行道。
|
|
|
3.实现导游图的仿真界面。
|
|
|
|
|
|
-注:很惭愧,有关基于邻接矩阵存储的无向图某两点之间的所有路径的相关算法我真的不会,另外由于时间关系选做的我也没做,对不起王阿川老师T_T
|
|
|
**/
|
|
|
|
|
|
#include <iostream>
|
|
@@ -20,29 +19,25 @@
|
|
|
#include <iomanip>
|
|
|
#include <stdlib.h>
|
|
|
#include <math.h>
|
|
|
-#define INFINITY 65535 ///无穷大,即不相邻
|
|
|
-#define MAX_VERTEX_NUM 20 ///最大的顶点个数
|
|
|
+#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;///边的信息
|
|
|
+ VRType adj; //距离
|
|
|
+ InfoType *info;//边的信息
|
|
|
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
|
|
|
-
|
|
|
typedef struct {
|
|
|
- VertexType vex[MAX_VERTEX_NUM];///顶点向量
|
|
|
- AdjMatrix arcs; ///邻接矩阵
|
|
|
- int vexnum,arcnum; ///顶点数和边数
|
|
|
+ VertexType vex[MAX_VERTEX_NUM];//顶点向量
|
|
|
+ AdjMatrix arcs; //邻接矩阵
|
|
|
+ int vexnum,arcnum; //顶点数和边数
|
|
|
}MGraph;
|
|
|
-
|
|
|
void create(MGraph &g,VertexType site[])
|
|
|
{
|
|
|
int i,j;
|
|
@@ -70,14 +65,12 @@ void create(MGraph &g,VertexType site[])
|
|
|
g.arcs[j][i].adj= g.arcs[i][j].adj;
|
|
|
|
|
|
}
|
|
|
-
|
|
|
-void output(MGraph g,int i)///根据序号i输出对应的景点的相关信息
|
|
|
+void output(MGraph g,int i)//根据序号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)
|
|
|
{
|
|
|
int i;
|
|
@@ -117,7 +110,7 @@ void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20])
|
|
|
for(j=0;j<g.vexnum;j++)
|
|
|
{
|
|
|
P[w][j]=P[v][j];
|
|
|
- if(P[w][j]==-1)///在p[w][]第一个等于-1的地方加上顶点w
|
|
|
+ if(P[w][j]==-1)//在p[w][]第一个等于-1的地方加上顶点w
|
|
|
{
|
|
|
P[w][j]=w;
|
|
|
break;
|
|
@@ -148,9 +141,9 @@ void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20])
|
|
|
for(w=0;w<g.vexnum;w++)
|
|
|
if(D[v][u]<INFINITY&&D[u][w]<INFINITY&&D[v][u]+D[u][w]<D[v][w])
|
|
|
{
|
|
|
- ///更新D
|
|
|
+ //更新D
|
|
|
D[v][w]=D[v][u]+D[u][w];
|
|
|
- ///更新p,从v到w的路径是从v到u,再从u到w的所有路径
|
|
|
+ //更新p,从v到w的路径是从v到u,再从u到w的所有路径
|
|
|
for(i=0;i<g.vexnum;i++)
|
|
|
{
|
|
|
if(P[v][u][i]!=-1)
|
|
@@ -158,7 +151,7 @@ void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20])
|
|
|
else
|
|
|
break;
|
|
|
}
|
|
|
- for(j=1;j<g.vexnum;j++)///注意:这里j从1开始而不是从0开始,因为从v到u的路径最后一个顶点是u, 而从u到w的路径第一个顶点是u,只需打印u一次即可。
|
|
|
+ for(j=1;j<g.vexnum;j++)//注意:这里j从1开始而不是从0开始,因为从v到u的路径最后一个顶点是u, 而从u到w的路径第一个顶点是u,只需打印u一次即可。
|
|
|
{
|
|
|
if(P[u][w][j]!=-1)
|
|
|
P[v][w][i++]=P[u][w][j];
|
|
@@ -269,17 +262,67 @@ void display_all(MGraph g)
|
|
|
|
|
|
void menu()
|
|
|
{
|
|
|
- printf("\n************************************************************\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("************************************************************\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");
|
|
|
+}
|
|
|
+void map(MGraph g)
|
|
|
+{
|
|
|
+ printf("\t\t\t 安科平面图\t\t\t\n");
|
|
|
+ printf(" --------------------------------------------------------------------- \t");
|
|
|
+ printf(" | |西门| |\n");
|
|
|
+ printf(" |---------------------------------------------------------------------|\n");
|
|
|
+ printf(" | xxxxxx路 |\n");
|
|
|
+ printf(" |---------------------------------------------------------------------|\n");
|
|
|
+ printf(" | ----------------- | | | |德| |德| |德| |德| |\n");
|
|
|
+ printf(" | 体 育 馆 | 球 | 场 | |馨| |馨| |馨| |馨| |\n");
|
|
|
+ printf(" | ----------------- | 毛 | 球 | |苑| |苑| |苑| |苑| |\n");
|
|
|
+ printf(" | | 羽 | 网 | |1 | |2 | |3 | |4 | |\n");
|
|
|
+ printf(" | |--------|--------| |\n");
|
|
|
+ printf(" | ( 操 场) | 场 | 场 | |\n");
|
|
|
+ printf(" | | 球 | 球 | |\n");
|
|
|
+ printf(" | ----------------- | 排 | 蓝 | |\n");
|
|
|
+ printf(" | ------------------- |\n");
|
|
|
+ printf(" | ----------------------- |\n");
|
|
|
+ printf(" | | 间 | 市 | 室 | |\n");
|
|
|
+ printf(" | | 空 | 超 | | |\n");
|
|
|
+ printf(" | | 创 | 苑 | | |\n");
|
|
|
+ printf(" | | 众 | 学 | 浴 | |\n");
|
|
|
+ printf(" | ----------------------- |\n");
|
|
|
+ printf(" | --------------- |\n");
|
|
|
+ printf(" | | | |\n");
|
|
|
+ printf(" | | 知 味 园 | |\n");
|
|
|
+ printf(" | | | |\n");
|
|
|
+ printf(" | --------------- |\n");;
|
|
|
+ printf(" | -------- -------- ------- |\n");
|
|
|
+ printf(" | | A | | B | | C | |\n");
|
|
|
+ printf(" | | 楼 | | 楼 | | 楼 | |\n");
|
|
|
+ printf(" | | 知 | | 知 | | 知 | |\n");
|
|
|
+ printf(" | | 致 | | 致 | | 致 | |\n");
|
|
|
+ printf(" | -------- -------- ------- |\n");
|
|
|
+ printf(" |------- ---------- |\n");
|
|
|
+ printf(" | 门 | | | |\n");
|
|
|
+ printf(" | | | 馆 | |\n");
|
|
|
+ printf(" | 南 | | 书 | |\n");
|
|
|
+ printf(" |-------| | 图 | |\n");
|
|
|
+ printf(" | ---------- |\n");
|
|
|
+ printf(" | -------- -------- ------- |\n");
|
|
|
+ printf(" | | A | | B | | C | |\n");
|
|
|
+ printf(" | | 楼 | | 楼 | | 楼 | |\n");
|
|
|
+ printf(" | | 行 | | 行 | | 行 | |\n");
|
|
|
+ printf(" | | 敏 | | 敏 | | 敏 | |\n");
|
|
|
+ printf(" | -------- -------- ------- |\n");
|
|
|
+ printf(" | ------- |\n");
|
|
|
+ printf(" | | 东 门 | |\n");
|
|
|
+ printf(" ----------------------------------------------------------------------");
|
|
|
+ printf("\n");
|
|
|
}
|
|
|
|
|
|
int main()
|
|
@@ -287,22 +330,22 @@ 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,"丹青楼","我现在就在丹青9楼苦逼的敲代码"},
|
|
|
- {6,"行政楼","李大大办公的地方"},
|
|
|
+ {1,"致知楼C","是一个神奇的地方,天天都有C楼的课"},
|
|
|
+ {2,"致知楼B","一群遭老头子办公的地方"},
|
|
|
+ {3,"致知楼A","一个离寝室最远的地方"},
|
|
|
+ {4,"德馨苑","我们的大本营,1栋2栋3栋是为女寝(但是3栋被男生占领了),4栋是为男寝"},
|
|
|
+ {5,"知味园","吃饭、办卡、读书、义卖、新生报到处,小小的地方无所不能"},
|
|
|
+ {6,"学院超市","一个坑钱的地方,thing贼贵"},
|
|
|
{7,"操场","情侣们秀恩爱的最佳去处"},
|
|
|
- {8,"9A学生公寓","信息学院男生的窝"},
|
|
|
- {9,"老食堂","味道比新食堂好那么一点点"},
|
|
|
- {10,"体育馆","大一上乒乓球的时候去过,听说郭德纲也去踩了踩"},
|
|
|
- {11,"新食堂","难吃"}
|
|
|
+ {8,"篮网球场","男生的窝"},
|
|
|
+ {9,"敏行楼","整个安科的实验楼,当然还算得上暂时的礼堂"},
|
|
|
+ {10,"众创空间","听说是创业的地方,反正我没去过"},
|
|
|
+ {11,"体育馆","最不要脸的地方,明明就是几个小房子啊"}
|
|
|
};
|
|
|
|
|
|
|
|
|
create(g,site);
|
|
|
- printf(" 欢迎来到校园导游系统! \n");
|
|
|
+ printf("******************欢迎来到安科校园导游系统!*****************\n");
|
|
|
LL1:menu();
|
|
|
printf("\n请输入你的选择:\n");
|
|
|
scanf("%d",&i);
|
|
@@ -375,6 +418,10 @@ LL1:menu();
|
|
|
goto LL1;
|
|
|
break;
|
|
|
case 9:
|
|
|
+ map(g);
|
|
|
+ goto LL1;
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
printf("谢谢你的使用,寨见!\n");
|
|
|
exit(0);
|
|
|
goto LL1;
|