其实感觉自己写的也挺乱的。 不过是第一个算是自己写的东西吧。 继续努力~ #include"校园景点布局.h" #include<string.h> #include<conio.h> #include<windows.h> #define MAX_SCENCE_SUM 100//最大景点数 #define MAX_LENGTH 10000//定义路径的无穷大 #define N 23//当前的景点数目 typedef struct data { int Num;//景点编号 char Name[100];//景点名称 char Introduction[1000];//景点介绍 }DATA; typedef struct vnode { int num;//景点编号 DATA Vdata;//景点信息 }VNODE,ADJLIST[MAX_SCENCE_SUM]; typedef struct graph { ADJLIST ADJDATA; int Path[MAX_SCENCE_SUM][MAX_SCENCE_SUM]; }GRAPH; GRAPH G; int PATH[MAX_SCENCE_SUM][MAX_SCENCE_SUM]; int SHORTESTPATH[MAX_SCENCE_SUM][MAX_SCENCE_SUM]; void CreatGraph() { int i,j; for(i = 1 ; i <= N ; i++) { G.ADJDATA[i].num=i; G.ADJDATA[i].Vdata.Num=i; } strcpy(G.ADJDATA[1].Vdata.Name,"主楼"); strcpy(G.ADJDATA[1].Vdata.Introduction,"黑龙江大学主楼是黑大最古老的建筑,同时也是俄语哲学等学科的办公教学场所。/n建筑风格为俄罗斯式,于90年代扩建一次,仍然保持了原有风格。"); strcpy(G.ADJDATA[2].Vdata.Name,"体育馆"); strcpy(G.ADJDATA[2].Vdata.Introduction,"可以进行综合性体育运动的体育场馆。/n馆内有篮球馆、羽毛球馆、乒乓球等场馆。"); strcpy(G.ADJDATA[3].Vdata.Name,"2号教学楼"); strcpy(G.ADJDATA[3].Vdata.Introduction,"综合性教学楼。"); strcpy(G.ADJDATA[8].Vdata.Name,"音乐厅"); strcpy(G.ADJDATA[8].Vdata.Introduction,"音乐厅。"); strcpy(G.ADJDATA[4].Vdata.Name,"A区游泳馆"); strcpy(G.ADJDATA[4].Vdata.Introduction,"建立比较早的游泳馆,所以环境和设施不是特别好。"); strcpy(G.ADJDATA[5].Vdata.Name,"联通广场"); strcpy(G.ADJDATA[5].Vdata.Introduction,"联通公司在黑龙江大学出资建立的广场。"); strcpy(G.ADJDATA[9].Vdata.Name,"图书馆"); strcpy(G.ADJDATA[9].Vdata.Introduction,"黑龙江大学图书馆是黑龙江省唯一一所地方综合性大学图书馆。/n是于1958年9月在哈尔滨外国语学院图书馆的基础上扩建起来的,其前身可追溯到抗战时期的延安外国语学校图书馆。"); strcpy(G.ADJDATA[10].Vdata.Name,"1号教学楼"); strcpy(G.ADJDATA[10].Vdata.Introduction,"综合性教学楼。主要为外语学院的学生在此上课。"); strcpy(G.ADJDATA[7].Vdata.Name,"校医院"); strcpy(G.ADJDATA[7].Vdata.Introduction," 校医院就诊的时间为8:00—11:30,13:30—17:00。/n在此时间外及节假日,医院均有值班医生和护士。/n医院将努力做到接待学生热心、解释问题耐心、诊断疾病细心、治疗用药放心。 "); strcpy(G.ADJDATA[11].Vdata.Name,"实验楼"); strcpy(G.ADJDATA[11].Vdata.Introduction,"数学科学技术学院和电工学院坐落于此。"); strcpy(G.ADJDATA[6].Vdata.Name,"博文楼"); strcpy(G.ADJDATA[6].Vdata.Introduction,"新建立的图书馆。"); strcpy(G.ADJDATA[12].Vdata.Name,"A区食堂"); strcpy(G.ADJDATA[12].Vdata.Introduction,"黑龙江大学饮食服务中心。"); strcpy(G.ADJDATA[13].Vdata.Name,"黑龙江大学出版社&&农学楼"); strcpy(G.ADJDATA[13].Vdata.Introduction,"黑龙江大学出版社是于2007年3月经中华人民共和国新闻出版总署批准,由黑龙江省教育厅主管、黑龙江大学主办的图书出版企业,是黑龙江省第一家正式注册为企业的出版社。"); strcpy(G.ADJDATA[14].Vdata.Name,"2号体育场"); strcpy(G.ADJDATA[14].Vdata.Introduction,"大学体育场。"); strcpy(G.ADJDATA[15].Vdata.Name,"汇文楼"); strcpy(G.ADJDATA[15].Vdata.Introduction,"是一座综合性教学楼。是各个学院学生的主要上课地点。"); strcpy(G.ADJDATA[16].Vdata.Name,"B区食堂"); strcpy(G.ADJDATA[16].Vdata.Introduction,"一层和二层为学生食堂。/n三层为大学生活动中心。/n四层为各个学院的导员办公室。"); strcpy(G.ADJDATA[17].Vdata.Name,"联通大厅"); strcpy(G.ADJDATA[17].Vdata.Introduction,"联通营业厅。"); strcpy(G.ADJDATA[18].Vdata.Name,"后勤服务中心"); strcpy(G.ADJDATA[18].Vdata.Introduction,"后勤服务中心。"); strcpy(G.ADJDATA[19].Vdata.Name,"4号教学楼"); strcpy(G.ADJDATA[19].Vdata.Introduction,"计算机科学技术学院和软件学院坐落于此。地下一层为学生创业园,另外汇通驾校为与此楼的一层。"); strcpy(G.ADJDATA[20].Vdata.Name,"3号教学楼"); strcpy(G.ADJDATA[20].Vdata.Introduction,"综合性教学楼。"); strcpy(G.ADJDATA[21].Vdata.Name,"C区游泳馆"); strcpy(G.ADJDATA[21].Vdata.Introduction,"黑龙江大学城游泳馆座落于黑龙江省大学城C区。/n作为东北三省唯一一座设施先进、功能齐全的现代化游泳场馆,规模与设备在全国堪称一流。"); strcpy(G.ADJDATA[22].Vdata.Name,"艺术楼"); strcpy(G.ADJDATA[22].Vdata.Introduction,"艺术学院坐落于此。"); strcpy(G.ADJDATA[23].Vdata.Name,"C区食堂"); strcpy(G.ADJDATA[23].Vdata.Introduction,"一层和二层为学生食堂。三层为阳光餐厅。"); for(i = 1 ; i <= N ; i++) for(j = 1 ;j <=N ; j++) G.Path[i][j]=MAX_LENGTH; for(i = 1 ;i <= N; i++) SHORTESTPATH[i][i]=0; G.Path[1][2]=G.Path[2][1]=150; G.Path[1][3]=G.Path[3][1]=70; G.Path[1][4]=G.Path[4][1]=170; G.Path[1][6]=G.Path[6][1]=270; G.Path[2][4]=G.Path[4][2]=170; G.Path[3][4]=G.Path[4][3]=230; G.Path[3][5]=G.Path[5][3]=80; G.Path[3][6]=G.Path[6][3]=230; G.Path[4][5]=G.Path[5][4]=150; G.Path[4][10]=G.Path[10][4]=130; G.Path[5][6]=G.Path[6][5]=230; G.Path[5][8]=G.Path[8][5]=170; G.Path[5][9]=G.Path[9][5]=100; G.Path[5][10]=G.Path[10][5]=110; G.Path[6][7]=G.Path[7][6]=150; G.Path[6][12]=G.Path[12][6]=120; G.Path[6][13]=G.Path[13][6]=180; G.Path[7][10]=G.Path[10][7]=50; G.Path[7][11]=G.Path[11][7]=70; G.Path[7][12]=G.Path[12][7]=120; G.Path[8][9]=G.Path[9][8]=120; G.Path[8][14]=G.Path[14][8]=170; G.Path[9][10]=G.Path[10][9]=80; G.Path[9][14]=G.Path[14][9]=120; G.Path[10][11]=G.Path[11][10]=100; G.Path[10][14]=G.Path[14][10]=150; G.Path[11][12]=G.Path[12][11]=100; G.Path[11][14]=G.Path[14][11]=170; G.Path[12][13]=G.Path[13][12]=120; G.Path[12][16]=G.Path[16][12]=150; G.Path[14][15]=G.Path[15][14]=120; G.Path[15][19]=G.Path[19][15]=250; G.Path[16][17]=G.Path[17][16]=100; G.Path[16][18]=G.Path[18][16]=100; G.Path[17][18]=G.Path[18][17]=30; G.Path[17][19]=G.Path[19][17]=120; G.Path[17][20]=G.Path[20][17]=130; G.Path[18][19]=G.Path[19][18]=130; G.Path[18][20]=G.Path[20][18]=130; G.Path[19][20]=G.Path[20][19]=100; G.Path[19][21]=G.Path[21][19]=220; G.Path[19][22]=G.Path[22][19]=270; G.Path[20][21]=G.Path[21][20]=220; G.Path[21][22]=G.Path[22][21]=80; G.Path[22][23]=G.Path[23][22]=190; } void Introduce() { int number; cout<<"请输入需要查询的经典编号:"; cin>>number; cout<<endl; switch(number) { case 1: cout<<"景点编号:"<<G.ADJDATA[1].Vdata.Num<<endl; cout<<"景点名称 "<<G.ADJDATA[1].Vdata.Name<<endl; cout<<"景点简介: "<<G.ADJDATA[1].Vdata.Introduction<<endl; break; case 2: cout<<"景点编号:"<<G.ADJDATA[2].Vdata.Num<<endl; cout<<"景点名称: "<<G.ADJDATA[2].Vdata.Name<<endl; cout<<"景点简介: "<<G.ADJDATA[2].Vdata.Introduction<<endl; break; case 3: cout<<"景点编号:"<<G.ADJDATA[3].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[3].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[3].Vdata.Introduction<<endl; break; case 4: cout<<"景点编号:"<<G.ADJDATA[4].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[4].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[4].Vdata.Introduction<<endl; break; case 5: cout<<"景点编号:"<<G.ADJDATA[5].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[5].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[5].Vdata.Introduction<<endl; break; case 6: cout<<"景点编号:"<<G.ADJDATA[6].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[6].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[6].Vdata.Introduction<<endl; break; case 7: cout<<"景点编号:"<<G.ADJDATA[7].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[7].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[7].Vdata.Introduction<<endl; break; case 8: cout<<"景点编号:"<<G.ADJDATA[8].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[8].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[8].Vdata.Introduction<<endl; break; case 9: cout<<"景点编号:"<<G.ADJDATA[9].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[9].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[9].Vdata.Introduction<<endl; break; case 10: cout<<"景点编号:"<<G.ADJDATA[10].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[10].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[10].Vdata.Introduction<<endl; break; case 11: cout<<"景点编号:"<<G.ADJDATA[11].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[11].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[11].Vdata.Introduction<<endl; break; case 12: cout<<"景点编号:"<<G.ADJDATA[12].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[12].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[12].Vdata.Introduction<<endl; break; case 13: cout<<"景点编号:"<<G.ADJDATA[13].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[13].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[13].Vdata.Introduction<<endl; break; case 14: cout<<"景点编号:"<<G.ADJDATA[14].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[14].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[14].Vdata.Introduction<<endl; break; case 15: cout<<"景点编号:"<<G.ADJDATA[15].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[15].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[15].Vdata.Introduction<<endl; break; case 16: cout<<"景点编号:"<<G.ADJDATA[16].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[16].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[16].Vdata.Introduction<<endl; break; case 17: cout<<"景点编号:"<<G.ADJDATA[17].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[17].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[17].Vdata.Introduction<<endl; break; case 18: cout<<"景点编号:"<<G.ADJDATA[18].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[18].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[18].Vdata.Introduction<<endl; break; case 19: cout<<"景点编号:"<<G.ADJDATA[19].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[19].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[19].Vdata.Introduction<<endl; break; case 20: cout<<"景点编号:"<<G.ADJDATA[20].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[20].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[20].Vdata.Introduction<<endl; break; case 21: cout<<"景点编号:"<<G.ADJDATA[21].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[21].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[21].Vdata.Introduction<<endl; break; case 22: cout<<"景点编号:"<<G.ADJDATA[22].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[22].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[22].Vdata.Introduction<<endl; break; case 23: cout<<"景点编号:"<<G.ADJDATA[23].Vdata.Num<<endl; cout<<"景点名称:"<<G.ADJDATA[23].Vdata.Name<<endl; cout<<"景点简介:"<<G.ADJDATA[23].Vdata.Introduction<<endl; break; default: cout<<"编号输入错误!!"<<endl; break; } } void FLOYD() { int i,j,k; for(i = 1 ;i <= N ;i++) for(j = 1 ; j <= N ; j++) { SHORTESTPATH[i][j]=G.Path[i][j]; PATH[i][j]=0; } for(k = 1 ; k <= N ; k++) for(i = 1 ;i <= N ;i++) for(j = 1 ; j <= N ; j++) { if(SHORTESTPATH[i][j]>SHORTESTPATH[i][k]+SHORTESTPATH[k][j]) { SHORTESTPATH[i][j]=SHORTESTPATH[i][k]+SHORTESTPATH[k][j]; PATH[i][j]=k; } } } void output(int i,int j) { int a = i,b = j; cout << "您要查询两景点间的最短的路径是:" << endl; if(SHORTESTPATH[i][j] != MAX_SCENCE_SUM) { if(i < j) { cout << G.ADJDATA[b].Vdata.Name; while(PATH[i][j] != 0) { cout << "<--" << G.ADJDATA[PATH[i][j]].Vdata.Name; if(i < j) j = PATH[i][j]; else i = PATH[j][i]; } cout << "<--" << G.ADJDATA[a].Vdata.Name<< endl; cout << endl; cout <<G.ADJDATA[a].Vdata.Name<< "到" <<G.ADJDATA[b].Vdata.Name<< "的最短距离是:" <<SHORTESTPATH[a][b] << "米" << endl; } else { cout <<G.ADJDATA[a].Vdata.Name; while(PATH[i][j]!=0) { cout<<"->"<<G.ADJDATA[PATH[i][j]].Vdata.Name; if(i<j) j=PATH[i][j]; else i=PATH[j][i]; } cout<<"->"<<G.ADJDATA[b].Vdata.Name; cout<<"/n/n"; cout<<G.ADJDATA[a].Vdata.Name<<"到"<<G.ADJDATA[b].Vdata.Name<<"最短距离是:"<<SHORTESTPATH[a][b]<<"米"<<endl; } } } void Shortestpath() { int i,j; cout<<"请输入需要查询的两个景点的编号:"; cin>>i>>j; if(i > N || i < 0 || j > N || j < 0) { cout << "输入错误,景点编号为1到24,请重新输入:" ; cin >> i >> j; } else { FLOYD(); output(i,j); } } void MENU(int x) { CreatGraph(); if(x==1) { cout<<endl<<endl<<endl<<endl; cout<<"/t _________________黑龙江大学小型校园导游系统________________"<<endl; cout<<"/t| |"<<endl; cout<<"/t| 1、景点相关信息查询 |"<<endl; cout<<"/t| 2、问路查询 |"<<endl; cout<<"/t| 3、查看景点一览图 |"<<endl; cout<<"/t| 4、退出查询系统 |"<<endl; cout<<"/t| |"<<endl; cout<<"/t ___________________________________________________________"<<endl; } else if(x==2) { system("cls"); cout<<"/t ___________________________________________________________"<<endl; cout<<"/t|黑龙江大学景点列表: 1、 主楼 |"<<endl; cout<<"/t| 2、 体育馆 |"<<endl; cout<<"/t| 3、 2号教学楼 |"<<endl; cout<<"/t| 4、 A区游泳馆 |"<<endl; cout<<"/t| 5、 联通广场 |"<<endl; cout<<"/t| 6、 博文楼 |"<<endl; cout<<"/t| | |——// 7、 校医院 |"<<endl; cout<<"/t| | | // 8、 音乐厅 |"<<endl; cout<<"/t| |_____| | 9、 图书馆 |"<<endl; cout<<"/t| | | | 10、1号教学楼 |"<<endl; cout<<"/t| | | | 11、实验楼 |"<<endl; cout<<"/t| | | / 12、A区食堂 |"<<endl; cout<<"/t| | |——/ 13、黑龙江大学出版社&&农学楼 |"<<endl; cout<<"/t| 14、2号体育场 |"<<endl; cout<<"/t| 15、汇文楼 |"<<endl; cout<<"/t| 16、B区食堂 |"<<endl; cout<<"/t| 17、联通广场 |"<<endl; cout<<"/t| 18、后勤服务中心 |"<<endl; cout<<"/t| 19、4号教学楼&&汇通驾校 |"<<endl; cout<<"/t| 20、3号教学楼 |"<<endl; cout<<"/t| 21、C区游泳馆 |"<<endl; cout<<"/t| 22、艺术楼 |"<<endl; cout<<"/t| 23、C区食堂 |"<<endl; cout<<"/t ___________________________________________________________"<<endl; } } void cometrue(int x) { switch(x) { case 1: { MENU(2); Introduce(); return ; } case 2: { MENU(2); Shortestpath(); return; } case 3: { system("cls"); map(); return; } case 4: exit(-1); } } void main() { system("color 0f"); int x; char choose; while(1) { MENU(1); cout<<endl<<"/t请输入所选服务类型:"; cin>>x; cometrue(x); cout<<"是否继续(Y / N):"; cin>>choose; if(choose=='Y' || choose=='y') { system("cls"); continue; } else if(choose=='N' || choose=='n') exit(0); system("cls"); } }