当前位置:文档之家› 校园导游咨询与最短路径

校园导游咨询与最短路径

#include"stdio.h"
#include
using namespace std;

void floyed()
{/*用floyed算法求两个景点的最短路径*/
int i,j,k,n;
char shortest[20][20];
char cost[20][20];
char path[20][20];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) /*初始化*/
{
shortest[i][j]=cost[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(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
}
}/*floyed*/

void display(int i,int j)
{/* 打印两个景点的路径及最短距离 */
int a,b;
a=i;
b=j;
cout<<"您要查询的两景点间最短路径是:\n\n";
if(shorte st[i][j]!=INT_MAX)
{
if(i{
cout<while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按逆序打印出来*/
cout<<"<-"<if(ij=path[i][j];
else
i=path[j][i];
}
cout<<"<-"<cout<<"\n\n";
cout<"<}
else
{
cout<while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按顺序打印出来*/
cout<<"->"<if(ij=path[i][j];
else
i=path[j][i];
}
cout<<"->"<cout<<"\n\n";
cout<"<}
}
else
cout<<"输入错误!不存在此路!\n\n";
cout<<"\n";
}/*display*/

void main()
{/*主函数*/
int i,j;
char k;
int n;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
cost[i][j]=INT_MAX;
cost[1][2]=cost[2][1]=10; cost[1][3]=cost[3][1]=10 ;
cost[2][3]=cost[3][2]=8; cost[2][7]=cost[7][2]=50;
cost[3][4]=cost[4][3]=5; cost[4][5]=cost[5][4]=15;
cost[5][6]=cost[6][5]=5; cost[5][13]=cost[13][5]=400;
cost[6][7]=cost[7][6]=5; cost[6][8]=cost[8][6]=100;
cost[7][8]=cost[8][7]=100; cost[8][9]=cost[9][8]=100;
cost[8][10]=cost[10][8]=150; cost[9][10]=cost[10][9]=40;
cost[9][12]=cost[12][9]=200; cost[10][13]=cost[13][10]=200;
cost[11][13]=cost[13][11]=150 ; cost[11][12]=cost[12][11]=20;
cost[12][15]=cost[15][12]=50; cost[13][14]=cost[14][13]=50;
cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;
cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;
cost[11][11]=cost[12][12]=cost[13][13]=cost[14][14]=cost[15][15]=0;
while(1)
{
cout<<"----------------欢迎使用豫西学院校园导游系统!----------------\n";
cout<<"1.景点信息查询………请按 i (introduc)键\n";
cout<<"2.景点最短路径查询…请按 s (shortestdistance)键\n";
cout<<"3.退出系统……………请按 e (exit)键\n";
cout<<"学校景点列表:\n";
cout<<"1:学校东正门 ";
cout<<"2:图书馆 ";
cout<<"3:实验楼 ";
cout<<"4:学校南门 ";
cout<<"5:篮球场\n";
cout<<"6:运动场 ";
cout<<"7:会议中心 ";
cout<<"8:梅园公寓 ";
cout<<"9:三清园餐

厅 ";
cout<<"10:桔苑公寓\n";
cout<<"11:教学楼(一) ";
cout<<"12: 教学楼(二) ";
cout<<"13: 教学楼(三) ";
cout<<"14: 教学楼(四)";
cout<<"15: 逸夫楼\n";
cout<<"请选择服务:";
cin>>k;
switch(k)
{
case 'i':
cout<<"进入景点信息查询:";
introduce();
break;
case 's':
cout<<"进入最短路径查询:";
shortestdistance();
break;
case 'e':
return;
default:
cout<<"输入信息错误!\n请输入字母i或s或e.\n";
break;
}
}
}/*main*/

void introduce()
{/*景点介绍*/
int a;
cout<<"您想查询哪个景点的详细信息?请输入景点编号:";
cin>>a;
cout<<"\n";
switch(a)
{
case 1:
cout<<"1:学校东正门\n\n 学校的正门,面对的是崤山路\n\n";break;
case 2:
cout<<"2:历史悠久的图书馆,学生借阅图书的集中地。 \n\n";break;
case 3:
cout<<"3:实验楼\n\n 设施齐全,教学实验的集中地。\n\n";break;
case 4:
cout<<"4:学校南门\n\n 学生就餐小吃集中地\n\n";break;
case 5:
cout<<"5:篮球场 \n\n 学生上体育课及运动的场地,设有篮球场、网球场等\n\n";break;
case 6:
cout<<"6:运动场\n\n 学生体育课时的运动场地,设有田径跑道、足球场、主席台等。\n\n";break;
case 7:
cout<<"7:会议中心\n\n 大型节目或重要报告演出地\n\n";break;
case 8:
cout<<"8:梅园公寓\n\n 女生住宿的集中地,环境优雅。\n\n";break;
case 9:
cout<<"9:三清园餐厅\n\n 学生及教师就餐集中地。\n\n\n";break;
case 10:
cout<<"10: 桔苑公寓\n\n 男生住宿的地方。\n\n";break;
case 11:
cout<<"11:教学楼(一)\n\n 学生上课学习的地方。\n\n\n";break;
case 12:
cout<<"12: 教学楼(二)\n\n学生上课学习的地方。\n\n";break;
case 13:
cout<<"13:教学楼(三)\n\n学生上课学习的地方。\n\n\n";break;
case 14:
cout<<"14: 教学楼(四)\n\n学生上自习的地方。\n\n";break;
case 15:
cout<<"15:逸夫楼\n\n 学生上课、科研实验的地方。\n\n\n";break;

default:
cout<<"景点编号输入错误!请输入1->15的数字编号!\n\n"; break;
}
}/*introduce*/

int shortestdistance()
{/*要查找的两景点的最短距离*/
int i,j;
char m;
cout<<"请输入要查询的两个景点的编号(1->15的数字编号并用','间隔):";
cin>>i>>m>>j;
if(i>n||i<=0||j>n||j<0)
{
cout<<"输入信息错误!\n\n";
cout<<" 请输入要查询的两个景点的编号(1->15的数字编号并用','间隔):\n";
cin>>i>>m>>j;
}
else
{
floyed();
display(i,j);
}
return 1;
}/*shortestdistance*/






相关主题
文本预览
相关文档 最新文档