资源描述
太原理工大学计算机科学与技术学院
题目:
设计一个校园导游程序,为来访的客人提供各种信息查询服务
一.需求分析:
此次课程设计的主要内容是校园导航,为来访的客人提供各种信息查询服务。主要包括:①查看学校的全景平面图②各个景点的名称、代号、简介等信息
③学校主要景点的分布④查询任意两个景点之间的最短路径。
⑴对于功能①的输入形式是没什么要求的,主要就是根据菜单的提示输入相应的数字选择相应的功能;对于功能②的输入形式的要求也比较简单,要查询某一景点的简介直接输入其对应的编号即可;对于功能③的输入形式的要求同功能①;对于功能④只需要输入起始景点和目的景点的编号即可。此程序在输入形式上都没什么特殊的要求只是一些简单的数字就可以了。
⑵功能①③就是输出由字符构成的一幅简易图,形式比较单一;景点的简介方面输出景点的简单信息就可以了;要查询最短路径的话输出的是从起始景点到目的地的最短路径中所途经的各个景点及距离。
⑶本程序所能达到的功能就是前面所提到的①—④中的功能。
二.概要设计:
抽象数据类型的定义:
ADT Graph{
数据对象 V:具有相同特性的数组元素的集合,称为顶点集。
数据关系 R:
R={VR}
VR={<v,w>|v,w∈V且P(v,w),<v,w> 表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}
基本操作P:
CreateGraph(&G,V,VR);
初始条件:V是图的顶点集,VR是图中弧的集合。
操作结果:按V和VR的定义构造图G。
DistroyGraph(&G)
初始条件:图G存在
操作结果:销毁图G
LocateVex(G,u);
初始条件:图G存在,u和G中顶点有相同的特征。
操作结果:若存在顶点u,则返回该顶点在图中的位置;否则返回其他信息。
GetVex(G,u);
初始条件:图G存在,u是图中的顶点。
操作结果:返回u的值。
InsertVex(&G,v);
初始条件 :图G存在,v和图中的顶点有相同的特性。
操作结果:在图G中新增顶点v.
InsertArc(&G,v,w);
初始条件:图G存在,v和w是图中的顶点。
操作结果:在图G中增添弧<v,w>,若是无向图,还增添弧<w,v>。
}ADT Graph
主程序流程(各函数之间的调用关系):
Main();//主函数
Initview();//景点信息的初始化
InitLength();//各个景点之间距离的初始化
log();//登录时的头部
showmenu();//登录后的菜单
browser();//全景平面图的浏览
browse_view_info();//景点简介的查询
browse_view_distribute();//主要景点的分布
onetoone();//查询任意两个景点之间的最短路径
onetuone()
Browser()
Showmenu()
InitLength()
Initview()
Main
调用关系如下:(函数内部没什么调用关系)
Browse_vew_info()
Browse_vew_distribute ()
log()
三.详细设计:
⑴图的结构:
typedef struct view//点的结构
{
int no;//景点编号
char name[100];//景点名称
char briefinfo[1000];//景点简介
}view;
typedef struct edge//边的结构
{
int length;//两个景点之间的距离
char direction[4];//方向
}edge;
⑵伪码算法:
Main()
{ path=(edge **)malloc(MAX*sizeof(edge));
for(v=0;v<MAX;v++)
path[v]=(edge *)malloc(1000*sizeof(edge));
TD=(view *)malloc(MAX*sizeof(view));
D=(DistancMatrix )malloc(MAX*sizeof(DistancMatrix));
P=(PathMatrix )malloc(MAX*sizeof(PathMatrix));
for(v=0;v<MAX;++v) P[v]=(int *)malloc(MAX*sizeof(int *));
Initview(TD); InitLength(path);//初始化
system("mode con: cols=140 lines=130");
log();while(1){
showmenu();//菜单
printf("请选择:\n");
scanf("%d",&k);
switch(k){
case 1: browser();system("cls");break;
case 2: browse_view_info(TD);system("cls");break;
case 3: browse_view_distribute();system("cls");break;
case 4: onetoall(P,D,TD,path);system("cls");break;
case 5: onetoone(P,D,TD,path); system("cls");break;
case 0: exit(0);
}}}
Void onetoone(PathMatrix P,DistancMatrix D,view *TD,edge **path)
{
while(flag) {
printf(请输入一个起始景点编号); scanf(v0);
if(v0<0||v0>MAX)
{printf("景点编号不存在!请重新输入景点编号:");
scanf(v0);}
if(v0>=0&&v0<MAX)
flag=0; }
flag=1;
while(flag) {
printf("请输入一个目的地景点编号:");
scanf("%d",&v1);
if(v1<0||v1>MAX) {
printf("景点编号不存在!请重新输入景点编号:");
scanf("%d",&v1);
}if(v1>=0&&v1<MAX)
flag=0; }
for(v=0;v<MAX;v++) {
final[v]=0;
D[v]=path[v0][v].length;
for(w=0;w<MAX;w++)P[v][w]=0;
if(D[v]<INFINITY){
P[v][v0]=1;P[v][v]=1; }
}
D[v0]=0;final[v0]=1;
for(i=1;i<MAX;i++){
min=INFINITY;
for(w=0;w<MAX;w++)
if(!final[w])
if(D[w]<min){v=w;min=D[w];}
final[v]=1;
for(w=0;w<MAX;w++)
if(!final[w]&&(min+path[v][w].length<D[w]))
{D[w]=min+path[v][w].length;
for(x=0;x<MAX;x++) P[w][x]=P[v][x];
P[w][w]=1;
}}
v=v1; w1=v0;
printf("%s",TD[v0].name);
do{
flag=0;min=INFINITY;
for(w=0;w<MAX;w++){
if(P[v][w]&&w!=v0){
flag=1;if(D[w]<min){j=w;min=D[w];}
}}
if(flag) {//输出部分
printf("向%s走%dm",path[w1][j].direction,path[w1][j].length);
printf("-->%s",TD[j].name);
w1=j;P[v][j]=0;}
else break;
}while(1);
printf("\n 总路线长%dm\n\n",D[v]);
printf("完毕,按任意键继续!\n");
getch();}
四.调试分析:
(1)设计过程中遇到的问题:
调试过程中难免会遇见这样或者那样的问题,最主要的问题就在迪杰斯特拉算法上了,这个算法是我们重点学习的一个算法。当时学习时就感觉很吃力,没怎么弄明白。算法确实是按照书上所写的抄到了程序中。最短路径确实也存到了数组P[v0][v]中,可是在输出相应的景点名称时总不能输出正确,感觉无从下手,后来才明白数组P中的存储是按照一定的顺序存储的但是并不一定是路径中所途经的景点的顺序,所以最后选择在求最短路径过程中将其输出。
回顾讨论和分析:迪杰斯特拉算法其实放在这里多少有些不合适,因为在求任意两个景点之间的最短路径要完全执行一遍算法,时间复杂度很高,当时在实现时没有怎么考虑这个问题。而且后来感觉要是实现时间复杂度的降低也不是一件很很简单的事情,就暂时放弃了,而是选择将这个算法直接搬过来,这里是一点败笔,尚需要改进。
(2)算法的时空分析
主要是迪杰斯特拉算法的时空分析:在计算到剩下的MAX-1个顶点的最短距离时第一个for循环时时间复杂度是O(n),每进行一次第二个for循环的时间复杂度都是O(n),第三个for循环也就是存储途经顶点时用的循环而不是书中算法所用的只是个地址的赋值,所以时间复杂度也是O(n),这样总的时间复杂度就是O(n3)。
五.用户使用说明:
程序刚运行时显示主要景点及其编号;菜单。
⑴ 输入1显示校园的全景图;
⑵ 输入2查询各个景点的简介范围0-10;
⑶ 输入3显示主要景点的分布图;
⑷ 输入4查询任意两个景点之间的最短路径;
⑸ 输入0退出系统;
六.测试结果:
请输入您想要查看的景点的编号:2
输出:第四教学楼,此教学楼不是很了解貌似是建筑艺术学院专有的教学楼,上课教室都是固定的。
请输入您想要查看的景点的编号:18
输出:工程训练中心,机械院的学生实习的场所,其他院工业认知实习时也会在此。里面有个很出名的风功能研究中心。
请按任意键继续!
请输入一个起始景点编号:52 景点编号不存在!请重新输入景点编号: 3 请输入一个目的地景点编号: 13
输出:第三栋宿舍楼(含医院)向东走10m-->第二栋宿舍楼向北走60m-->大礼堂 总路线长70m
完毕,按任意键继续!
请输入一个起始景点编号:8 请输入一个目的地景点编号: 27
输出:第十二栋宿舍楼向西走40m-->春晖楼向北走20m-->泽园向西走40m-->大礼堂向北走10m-->教学实验楼(建设中)
总路线长110m
完毕,按任意键继续!
七.附录:源程序
#include<stdio.h>#include<stdlib.h>#include<string.h>
#include<windows.h>#include<conio.h>#include<malloc.h>
#define MAX 50#define TRUE 1#define FALSE 0
#define INFINITY 10000
typedef int **PathMatrix;
typedef int *DistancMatrix;
typedef struct view
{ int no;//景点编号
char name[100];//景点名称
char briefinfo[1000];//景点简介
}view;
typedef struct edge
{ //pathlength arcs;//两个景点之间的距离
int length; char direction[4];//方向
}edge;
void showmenu(){
printf(" ************************************\n");
printf(" $ 主要景点列表 $ \n");
printf(" ************************************\n");
printf(" <23> 操场<22> 游泳馆\n");
printf(" <19> 3教<21> 体育馆\n");
printf(" <17> 2教<1> 1教\n");
printf(" <24> 图书馆<25> 2实验楼\n");
printf(" <40> 9实验楼<3> 医院 \n");
printf(" <5> 春晖楼<32> 7#宿舍楼 \n");
printf(" <10> 青春苑<34> 二三食堂\n");
printf(" <3> 医院<0>大门\n\n");
printf(" 1.查看学校全景图\n");
printf(" 2.查询各个景点简介\n");
printf(" 3.查看学校主要景点分布图\n");
printf(" 4.查询某一景点到其它所有景点的最短路径\n");
printf(" 5.查询任意两景点之间的最短路径\n");
//printf("\t\t\t\t\t\t6.游览路线推荐\n");printf(" 0.退出\n");}
void log()
{ printf("\t\t\t\t\t\t\t"); printf("欢"); Sleep(100); printf("迎");
Sleep(100); printf("进");Sleep(100); printf("入");Sleep(100);
printf("石");Sleep(100);printf("家"); Sleep(100);printf("庄");
Sleep(100);printf("铁");Sleep(100);printf("道"); Sleep(100);
printf("大");Sleep(100);printf("学");Sleep(100); printf("校");
Sleep(100);printf("园");Sleep(100);printf("导"); Sleep(100); printf("游");Sleep(100);printf("咨"); Sleep(100);printf("询");
Sleep(100);printf("系");Sleep(100);printf("统"); Sleep(100); printf("\n");}
view *Initview(view *TD)
{//初始化景点内容
int i; or(i=0;i<MAX;i++) TD[i].no=i;
strcpy(TD[0].name,"学校大门");
strcpy(TD[1].name,"第一教学楼");
strcpy(TD[2].name,"第四教学楼");
strcpy(TD[3].name,"第三栋宿舍楼(含医院)");
strcpy(TD[4].name,"第二栋宿舍楼");
strcpy(TD[5].name,"春晖楼"); strcpy(TD[6].name,"开元楼");
strcpy(TD[7].name,"招待所");
strcpy(TD[8].name,"第十二栋宿舍楼");
strcpy(TD[9].name,"第十三栋宿舍楼");
strcpy(TD[10].name,"青春苑"); strcpy(TD[11].name,"篮球场一");
strcpy(TD[12].name,"泽园"); strcpy(TD[13].name,"大礼堂");
strcpy(TD[14].name,"第一实验楼"); strcpy(TD[15].name,"翠园");
strcpy(TD[16].name,"沁园"); strcpy(TD[17].name,"第二教学楼");
strcpy(TD[18].name,"工程训练中心");
strcpy(TD[19].name,"第三教学楼"); strcpy(TD[20].name,"西操场");
strcpy(TD[21].name,"体育馆");
strcpy(TD[22].name,"游泳教学场"); strcpy(TD[23].name,"大操场");
strcpy(TD[24].name,"图书馆");
strcpy(TD[25].name,"第二实验楼");
strcpy(TD[26].name,"第五教学楼");
strcpy(TD[27].name,"教学实验楼(建设中)");
strcpy(TD[28].name,"第五栋宿舍楼");
strcpy(TD[29].name,"第四栋宿舍楼");
strcpy(TD[30].name,"研究生楼");
strcpy(TD[31].name,"第六栋宿舍楼");
strcpy(TD[32].name,"第七栋宿舍楼");
strcpy(TD[33].name,"第八栋宿舍楼");
strcpy(TD[34].name,"第二三食堂");
strcpy(TD[35].name,"第九栋宿舍楼");
strcpy(TD[36].name,"篮球场二");
strcpy(TD[37].name,"消费合作社");
strcpy(TD[38].name,"第三实验楼");
strcpy(TD[39].name,"机械工程学院");
strcpy(TD[40].name,"第九实验楼"); strcpy(TD[41].name,"樱花林");
strcpy(TD[42].name,"交通事故应急中心");
strcpy(TD[43].name,"洗浴中心"); strcpy(TD[44].name,"开水房");
strcpy(TD[45].name,"第一栋宿舍楼");
strcpy(TD[46].name,"第十栋宿舍楼");
strcpy(TD[47].name,"第十一栋宿舍楼");
strcpy(TD[48].name,"第十五栋宿舍楼");
strcpy(TD[49].name,"学校小门");
strcpy(TD[0].briefinfo,"学校大门,出门坐车的地方门口有环2,有23路(到火车站)有64路(到北站),平常学生很少在此出门一般都是车辆出入的地方。");
strcpy(TD[1].briefinfo,"第一教学楼,学校最大的教学楼学生上课自习的地方,五楼有机房有耳麦也就是语音室。");
strcpy(TD[2].briefinfo,"第四教学楼,此教学楼不是很了解貌似是建筑艺术学院专有的教学楼,上课教室都是固定的。");
strcpy(TD[3].briefinfo,"第三栋宿舍楼(含医院)交通学院的男生宿舍楼建筑貌似相当的破,可以跟六栋媲美了。医院更是不堪忍受,医生技术差动不动就是挂点滴,还很贵。设施差就不言而喻了。");
strcpy(TD[4].briefinfo,"第二栋宿舍楼,人文学院的宿舍楼公安队的多,好像跟三栋差不多一样破。");
strcpy(TD[5].briefinfo,"春晖楼,目前铁大的门面,最高的楼,这里是很多学院办公的地方学校的各个办事处也都设在这栋楼里。");
strcpy(TD[6].briefinfo,"开元楼,对此楼不甚了解,听说是1952年所建,开元楼顾名思义学校开元的时候所建。里面住着些什么人不太清楚");
strcpy(TD[7].briefinfo,"招待所,外来人可以住宿吃饭的地方不过超级贵");
strcpy(TD[8].briefinfo,"第十二栋宿舍楼,貌似里面全是土木学院的学生");
strcpy(TD[9].briefinfo,"第十三栋宿舍楼,女生宿舍楼,不过楼下男生较多(不解释)。");
strcpy(TD[10].briefinfo,"青春苑,一二楼又名综合餐厅,一楼价钱还可以,做的饭勉强凑合,二楼很贵,饭也比较难吃。(本人很少去)");
strcpy(TD[11].briefinfo,"篮球场一,平常当然打篮球的比较多了,不过也是搞露天活动的绝佳之地。");
strcpy(TD[12].briefinfo,"泽园,这里有伟大的毛泽东像(泽园的名字就这么来的?我不是很清楚),毛泽东前面貌似是大家都称之为风口地方,泽园里有个情人约会的绝佳地方。");
strcpy(TD[13].briefinfo,"大礼堂,举办大型联欢活动的地儿,(据说要花钱),每周六放映电影(要门票3元)。");
strcpy(TD[14].briefinfo,"第一实验楼,这里还包含一个综合楼可以上课自习,实验楼里全都是物理实验室。");
strcpy(TD[15].briefinfo,"翠园,早上学生朗读英语,晚上情人幽会的地方,有核桃树唉。");
strcpy(TD[16].briefinfo,"沁园,基本同翠园,不过有喷泉,也不怎么喷水,也就学校有个什么大事才冒出几点水来,好像天天喷水会浪费多少水电似的。有个很大的钟。");
strcpy(TD[17].briefinfo,"第二教学楼,此楼虽新但建筑不怎么地,功能基本同一教,不过五楼没有语音室");
strcpy(TD[18].briefinfo,"工程训练中心,机械院的学生实习的场所,其他院工业认知实习时也会在此。里面有个很出名的风功能研究中心。");
strcpy(TD[19].briefinfo,"第三教学楼,全是阶梯教室,不提供自习室。");
strcpy(TD[20].briefinfo,"西操场,分为两部分,南边是轮滑场(却有很多人在此学开车),北边是篮球场人那叫一个多。");
strcpy(TD[21].briefinfo,"体育馆,没怎么进去过,因为要花钱啊,貌似里面也不怎么地。");
strcpy(TD[22].briefinfo,"游泳教学场,只有夏天开放包括暑假好像是赚钱的进去太贵,我都是上课安排时才进去,人也是那叫一个多。");
strcpy(TD[23].briefinfo,"大操场,本校所有学生上体育课的地方,早晚开放可以跑步。");
strcpy(TD[24].briefinfo,"图书馆,藏书较多,不过比较旧但是很有价值;二楼电子阅览室;一楼有打印室。");
strcpy(TD[25].briefinfo,"第二实验楼,此乃本院的楼(信息学院)。我们都称之为破楼,学生办理校园卡的地方。(好像快要拆了)");
strcpy(TD[26].briefinfo,"第五教学楼,研究生上课的教学楼,里面上自习的全是要考研的学生,貌似研究生不上自习?(不解释)");
strcpy(TD[27].briefinfo,"教学实验楼(建设中),此楼功能待定。");
strcpy(TD[28].briefinfo,"第五栋宿舍楼,好像经济管理学院男生居多,其他不清楚。");
strcpy(TD[29].briefinfo,"第四栋宿舍楼,男生宿舍楼,研究生。");
strcpy(TD[30].briefinfo,"研究生宿舍楼,研究生女生宿舍楼。");
strcpy(TD[31].briefinfo,"第六栋宿舍楼,此宿舍楼很出名,破的出名,楼下男生也较多(不解释)。");
strcpy(TD[32].briefinfo,"第七栋宿舍楼,电气院男生的天地。");
strcpy(TD[33].briefinfo,"第八栋宿舍楼,这里谁们住就不知道了,反正是男生宿舍楼。");
strcpy(TD[34].briefinfo,"第二三食堂,学校的食堂,饭菜较便宜,就是不怎么好吃,不过也是大多数人的天堂。");
strcpy(TD[35].briefinfo,"第九栋宿舍楼,本人宿舍楼,也是全校最大的宿舍楼,整栋楼呈现为一本展开的书。人比较杂,土木的信息的建艺的等等等等");
strcpy(TD[36].briefinfo,"篮球场二,人也比较多。");
strcpy(TD[37].briefinfo,"消费合作社,学校唯一可以买生活日用品的地方,较贵。功能很齐全。");
strcpy(TD[38].briefinfo,"第三实验楼,电气院的实验楼主要是一些单片机或模拟电子技术方面的实验室。");
strcpy(TD[39].briefinfo,"机械工程学院,机械院的办公之地。");
strcpy(TD[40].briefinfo,"第九实验楼,全校的网络中心,有很多机房,也是本程序的诞生之地,另一半貌似是建筑艺术的实验室。");
strcpy(TD[41].briefinfo,"樱花林,不了解。");
strcpy(TD[42].briefinfo,"交通事故应急中心,新盖的楼,里面功能太多了,很多院要在此办公。");
strcpy(TD[43].briefinfo,"洗浴中心,学校洗澡的地方,感觉蛮实惠的。");
strcpy(TD[44].briefinfo,"开水房,唯一的开水房,人多。");
strcpy(TD[45].briefinfo,"第一栋宿舍楼,女生天堂。");
strcpy(TD[46].briefinfo,"第十栋宿舍楼,男生宿舍楼,材料院的居多。");
strcpy(TD[47].briefinfo,"第十一栋宿舍楼,男生宿舍楼,机械院的居多。");
strcpy(TD[48].briefinfo,"第十五栋宿舍楼,新盖女生宿舍楼也是女生天堂啊。");
strcpy(TD[49].briefinfo,"学校小门,与招待所相距较近,平时学生外出只要不坐车都从此门出入。");
return TD;}
edge **InitLength(edge **path)
{ int i,j;for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
{ path[i][j].length=INFINITY;
strcpy(path[i][j].direction,"0");}
//printf("%d\n",path[45][44].length);
path[0][1].length=20;strcpy(path[0][1].direction,"北");
path[1][17].length=50; strcpy(path[1][17].direction,"西");
path[1][2].length=40; strcpy(path[1][2].direction,"东");
path[1][16].length=20; strcpy(path[1][16].direction,"北");
path[1][15].length=30; strcpy(path[1][15].direction,"东北");
path[1][3].length=100; strcpy(path[1][3].direction,"东");
path[17][18].length=40; strcpy(path[17][19].direction,"西");
path[17][19].length=80; strcpy(path[17][19].direction,"北");
path[2][15].length=5; strcpy(path[2][15].direction,"北");
path[2][3].length=20; strcpy(path[2][3].direction,"东");
path[16][15].length=30; strcpy(path[16][15].direction,"东");
path[16][24].length=30; strcpy(path[16][24].direction,"北");
path[16][21].length=40; strcpy(path[16][21].direction,"西");
path[15][14].length=15; strcpy(path[15][14].direction,"东");
path[15][26].length=20; strcpy(path[15][26].direction,"北");
path[3][4].length=10; strcpy(path[3][4].direction,"东");
path[3][7].length=20; strcpy(path[3][7].direction,"南");
path[19][20].length=50; strcpy(path[19][20].direction,"西");
path[24][21].length=20; strcpy(path[24][21].direction,"西");
path[24][25].length=40; strcpy(path[24][25].direction,"东then北");
path[21][19].length=10; strcpy(path[21][19].direction,"西");
path[21][22].length=30; strcpy(path[21][22].direction,"北");
path[14][13].length=50; strcpy(path[14][13].direction,"东");
path[26][27].length=30; strcpy(path[26][27].direction,"东");
path[26][25].length=40; strcpy(path[26][25].direction,"西北");
path[4][5].length=60; strcpy(path[4][5].direction,"东");
path[4][7].length=20; strcpy(path[4][7].direction,"南");
path[4][13].length=60; strcpy(path[4][13].direction,"北");
path[7][49].length=5; strcpy(path[7][49].direction,"南");
path[7][6].length=40; strcpy(path[7][6].direction,"东");
path[6][5].length=50; strcpy(path[6][5].direction,"东");
path[25][38].length=10; strcpy(path[25][38].direction,"北");
path[25][22].length=60; strcpy(path[25][22].direction,"西");
path[22][23].length=50; strcpy(path[22][23].direction,"西");
path[22][39].length=50; strcpy(path[22][39].direction,"北");
path[13][12].length=40; strcpy(path[13][12].direction,"东");
path[13][27].length=10; strcpy(path[13][27].direction,"北");
path[27][14].length=20; strcpy(path[27][14].direction,"南");
path[27][12].length=100; strcpy(path[27][12].direction,"东");
path[5][8].length=40; strcpy(path[5][8].direction,"东");
path[5][9].length=40; strcpy(path[5][9].direction,"东");
path[5][12].length=20; strcpy(path[5][12].direction,"北");
path[38][40].length=50; strcpy(path[38][40].direction,"北");
path[38][37].length=100; strcpy(path[38][37].direction,"东");
path[38][22].length=60; strcpy(path[38][22].direction,"西");
path[39][40].length=30;strcpy(path[39][40].direction,"东");
path[12][28].length=20;strcpy(path[12][38].direction,"北");
path[12][11].length=20;strcpy(path[12][11].direction,"东");
path[12][29].length=20;strcpy(path[12][29].direction,"北");
path[8][9].length=10;strcpy(path[8][9].direction,"北");
path[9][10].length=60;strcpy(path[9][10].direction,"北");
path[9][11].length=50;strcpy(path[9][11].direction,"西北");
path[40][42].length=30;strcpy(path[40][42].direction,"东");
path[40][41].length=50;strcpy(path[40][41].direction,"东南");
path[37][44].length=20;strcpy(path[37][44].direction,"东北");
path[37][36].length=20;strcpy(path[37][36].direction,"东");
path[28][33].length=20;strcpy(path[28][33].direction,"北");
path[28][29].length=10;strcpy(path[28][29].direction,"东");
path[11][29].length=20;strcpy(path[11][29].direction,"北");
path[11][30].length=50;strcp
展开阅读全文