其实感觉自己写的也挺乱的。
不过是第一个算是自己写的东西吧。
继续努力~
#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");
}
}