校园导游

来源:互联网 发布:php学生管理系统源代码 编辑:程序博客网 时间:2024/04/26 11:10
#include<iostream>#include<cstring>using namespace std;#define Maxvexnum 50   /*景点个数最大50*/#define MAXCOST 1000  /*定义路径的无穷大*/#define T 10            /*目前景点个数*/typedef struct{    char name[20];     /*景点名称*/    char number[15];   /*景点代号*/    char introduce[100]; /*景点简介*/}Elemtype;typedef struct{    int num;            /*顶点编号*/    Elemtype date;      /*顶点信息*/}Vertex;               /*定义顶点*/typedef struct{    Vertex vexs[Maxvexnum];   /*存放顶点的一维数组*/    unsigned int edges[Maxvexnum][Maxvexnum]; /*存放路径的长度*/    int n,e;}MGraph;MGraph MGr;    /*全局变量,定义MGr为MGraph类型*/int shortest[Maxvexnum][Maxvexnum];  /*定义全局变量存贮最小路径*/int path[Maxvexnum][Maxvexnum];      /*定义存贮路径*/void init(){    int i,j;    MGr.vexs[1].num=1;    strcpy(MGr.vexs[1].date.name,"图书馆");    strcpy(MGr.vexs[1].date.number,"01");    strcpy(MGr.vexs[1].date.introduce,"自习和看书的地方\n");    MGr.vexs[2].num=2;    strcpy(MGr.vexs[2].date.name,"校医院");    strcpy(MGr.vexs[2].date.number,"02");    strcpy(MGr.vexs[2].date.introduce,"学生看病的地方\n");    MGr.vexs[3].num=3;    strcpy(MGr.vexs[3].date.name,"中国邮政");    strcpy(MGr.vexs[3].date.number,"03");    strcpy(MGr.vexs[3].date.introduce,"发收邮件的地方\n");    MGr.vexs[4].num=4;    strcpy(MGr.vexs[4].date.name,"学生活动中心");    strcpy(MGr.vexs[4].date.number,"04");    strcpy(MGr.vexs[4].date.introduce,"学生活动和文艺演出\n");    MGr.vexs[5].num=5;    strcpy(MGr.vexs[5].date.name,"篮球场");    strcpy(MGr.vexs[5].date.number,"05");    strcpy(MGr.vexs[5].date.introduce,"打篮球的地方,附近有网球场和排球场\n");    MGr.vexs[6].num=6;    strcpy(MGr.vexs[6].date.name,"第七教学楼");    strcpy(MGr.vexs[6].date.number,"06");    strcpy(MGr.vexs[6].date.introduce,"学生上课的地方\n");    MGr.vexs[7].num=7;    strcpy(MGr.vexs[7].date.name,"第二教学楼");    strcpy(MGr.vexs[7].date.number,"07");    strcpy(MGr.vexs[7].date.introduce,"电子、机械、自动化学院\n");    MGr.vexs[8].num=8;    strcpy(MGr.vexs[8].date.name,"第一教研楼");    strcpy(MGr.vexs[8].date.number,"08");    strcpy(MGr.vexs[8].date.introduce,"通信和计算机学院\n");    MGr.vexs[9].num=9;    strcpy(MGr.vexs[9].date.name,"第六教研楼");    strcpy(MGr.vexs[9].date.number,"09");    strcpy(MGr.vexs[9].date.introduce,"自习和考研学习的地方\n");    MGr.vexs[10].num=10;    strcpy(MGr.vexs[10].date.name,"南大门");    strcpy(MGr.vexs[10].date.number,"10");    strcpy(MGr.vexs[10].date.introduce,"学校南边的入口,气势宏伟\n");    for(i=1;i<=T;i++)    {        for(j=1;j<=T;j++)        {            MGr.edges[i][j]=MAXCOST;        }    }    for(i=1;i<=T;i++)    {        shortest[i][i]=0;    }     /*初始化*/    MGr.edges[1][2]=MGr.edges[2][1]=15;    MGr.edges[1][9]=MGr.edges[9][1]=15;    MGr.edges[2][3]=MGr.edges[3][2]=6;    MGr.edges[2][6]=MGr.edges[6][2]=20;    MGr.edges[3][4]=MGr.edges[4][3]=24;    MGr.edges[3][6]=MGr.edges[6][3]=17;    MGr.edges[4][6]=MGr.edges[6][4]=20;    MGr.edges[4][8]=MGr.edges[8][4]=18;    MGr.edges[5][7]=MGr.edges[7][5]=16;    MGr.edges[6][7]=MGr.edges[7][6]=30;    MGr.edges[6][8]=MGr.edges[8][6]=10;    MGr.edges[7][8]=MGr.edges[8][7]=12;    MGr.edges[7][9]=MGr.edges[9][7]=28;    MGr.edges[8][10]=MGr.edges[10][8]=45;    MGr.edges[1][1]=MGr.edges[2][2]=MGr.edges[3][3]=MGr.edges[4][4]=MGr.edges[5][5]=0;    MGr.edges[6][6]=MGr.edges[7][7]=MGr.edges[8][8]=MGr.edges[9][9]=MGr.edges[10][10]=0;} void introduce(){    int n;    cout<<"请输入查询景点编号:"<<endl;    cin>>n;     switch(n)    {    case 1:        cout<<"景点编号:"<<MGr.vexs[1].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[1].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[1].date.introduce<<endl;        break;    case 2:        cout<<"景点编号:"<<MGr.vexs[2].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[2].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[2].date.introduce<<endl;        break;    case 3:        cout<<"景点编号:"<<MGr.vexs[3].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[3].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[3].date.introduce<<endl;        break;    case 4:        cout<<"景点编号:"<<MGr.vexs[4].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[4].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[4].date.introduce<<endl;        break;    case 5:        cout<<"景点编号:"<<MGr.vexs[5].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[5].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[5].date.introduce<<endl;        break;    case 6:        cout<<"景点编号:"<<MGr.vexs[6].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[6].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[6].date.introduce<<endl;        break;    case 7:        cout<<"景点编号:"<<MGr.vexs[7].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[7].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[7].date.introduce<<endl;        break;    case 8:        cout<<"景点编号:"<<MGr.vexs[8].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[8].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[8].date.introduce<<endl;        break;    case 9:        cout<<"景点编号:"<<MGr.vexs[9].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[9].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[9].date.introduce<<endl;        break;    case 10:        cout<<"景点编号:"<<MGr.vexs[10].date.number<<endl;        cout<<"景点名称:"<<MGr.vexs[10].date.name<<endl;        cout<<"景点简介:"<<MGr.vexs[10].date.introduce<<endl;        break;    default:        cout<<"输入序号错误。";        break;    }}/*弗洛伊德算法求最短路径*/void floyd(){    int i,j,k;    for(i=1;i<=T;i++)    {        for(j=1;j<=T;j++)        {            shortest[i][j]=MGr.edges[i][j]; //初始化数组            path[i][j]=0;        }    }      for(k=1;k<=T;k++)    {        for(i=1;i<=T;i++)        {            for(j=1;j<=T;j++)            {                if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))                {                    shortest[i][j]=shortest[i][k]+shortest[k][j];                    path[i][j]=k;//记录经过的路径                }            }        }    }}/* 打印两个景点的路径及最短距离 */void display(int i,int j){    int a,b;    int temp;    a=i;    b=j;    temp=path[i][j];    cout<<a;    if(path[i][j]!=0)    {        if(path[i][temp]!=0)        {            cout<<"->"<<path[i][temp];        }        cout<<"->"<<temp;        if(path[temp][j]!=0)        {            cout<<"->"<<path[temp][j];        }    }    cout<<"->"<<b;    cout<<"\n\n";     cout<<a<<"->"<<b<<"最短距离是"<<shortest[a][b]<<"米"<<"\n\n"; }/*查找的两景点的最短距离*/int shortestdistance(){    int i,j;     cout<<"请输入要查询的两个景点的编号(数字编号之间用' '间隔):";    cin>>i>>j;    if(i>T||i<=0||j>T||j<0)    {        cout<<"输入信息错误!请重新输入!\n\n";    }    else    {        floyd();        display(i,j);    }    return 1;}void main(){    char k;    init();    cout<<"*  欢迎使用校园导游咨询  *\n";    while(1)    {        cout<<"1.景点信息查询请按 i 键\n";        cout<<"2.景点最短路径查询请按 s 键\n";        cout<<"3.退出系统请按 e 键\n";         cout<<"请选择服务:";        cin>>k;        switch(k)        {        case 'i':            cout<<"景点简介查询(请输入1~8)。";            introduce();            break;        case 's':            cout<<"景点最短路径查询。";            shortestdistance();            break;        case 'e':            exit(0);         }     }    system("pause");}
原创粉丝点击