校内导航系统

利用图结构、Floyd算法求最短路径做校内导航系统。

源代码:

#include "stdafx.h"

#include <iostream>

#include <string>

#define MAX 10000

using namespace std;

 

struct Data

{

        intnum;

        charname[50];

        charintroduce[100];

};

class School

{

private:

        Datadate[11];

        intdistance[11][11];

        intPath[11][11];

        intShortestDistance[11][11];

public:

   School();

        ~School(){}

        voidFloyd();

        voidIntroduce(int);

        voidprint(int ,int);

   void ShortDistance();

        voidMap();

};

 

School::School()

{

        inti,j;

        for(i=1;i<=10;i++)

        {

                 date[i].num=i;

                 switch(i)

                 {

                     case 1:

                         strcpy(date[1].name,"西安石油大学图书馆");

                   strcpy(date[1].introduce,"西安石油大学标志性建筑物,全校以此图书馆为中心展开。");

                         case2:

                                          strcpy(date[2].name,"A区教学楼");

                   strcpy(date[2].introduce,"也被称为第一教学楼,用于上课教学,大多小教室。");

 

           case 3:

                    strcpy(date[3].name,"B区教学楼");

                   strcpy(date[3].introduce,"也被称为第二教学楼,用于上课教学,全为大教室。");

 

           case 4:

                    strcpy(date[4].name,"经管人文楼");

                   strcpy(date[4].introduce,"专为经济管理学院和人文科学学院设置的办公楼。");

 

           case 5:

                    strcpy(date[5].name,"新食堂");

                   strcpy(date[5].introduce,"也被称为第二食堂,一楼二楼为普通食堂,三楼包含清真食堂。");

 

            case 6:

                    strcpy(date[6].name,"老食堂");

                   strcpy(date[6].introduce,"也被称为第一食堂,一楼包含普通食堂和清真食堂,二楼为普通食堂,三楼为腾辉大学生活动中心。");

 

           case 7:

                    strcpy(date[7].name,"老操场");

                    strcpy(date[7].introduce,"老操场旁为学校校医务室和课外拓展基地。老操场有乒乓球场、排球场、网球场。");

 

           case 8:

                    strcpy(date[8].name,"新操场");

                   strcpy(date[8].introduce,"新操场有舞蹈室、生活超市。");

 

           case 9:

                    strcpy(date[9].name,"北门");

                   strcpy(date[9].introduce,"门口为沣京大道。门口有去往各地的公交车站点。");

 

           case 10:

                    strcpy(date[10].name,"东门");

                   strcpy(date[10].introduce,"门口有各种小吃,门口对面有超市、酒店、各种特色的饭馆。");

                                          break;

                 }

        }

        for(i=1;i<=10;i++)

    {

     ShortestDistance[i][i]=0;

   } 

        for(i=1;i<=10;i++)

        {

                 for(j=1;j<=10;j++)

                 {

                         distance[i][j]=MAX;

                 }

        }

        distance[1][2]=distance[2][1]=400;

  distance[1][3]=distance[3][1]=300;

  distance[1][4]=distance[4][1]=300;

  distance[1][9]=distance[9][1]=1000;

  distance[1][10]=distance[10][1]=1000;

  distance[2][3]=distance[3][2]=300;

  distance[2][6]=distance[6][2]=700;

  distance[2][7]=distance[7][2]=800;

  distance[3][4]=distance[4][3]=100;

  distance[3][5]=distance[5][3]=600;

  distance[4][5]=distance[5][4]=500;

  distance[4][8]=distance[8][4]=400;

  distance[4][10]=distance[10][4]=800;

  distance[5][8]=distance[8][5]=500;

  distance[6][7]=distance[7][6]=500;

  distance[8][10]=distance[10][8]=700;

  distance[1][1]=distance[2][2]=distance[3][3]=distance[4][4]=0;

  distance[5][5]=distance[6][6]=distance[7][7]=distance[8][8]=0;

  distance[9][9]=distance[10][10]=0;

}

 

void School::Introduce(int i)

{

        cout<<"地点代号:"<<date[i].num<<endl;

        cout<<"地点名称:"<<date[i].name<<endl;

        cout<<"地点介绍:"<<date[i].introduce<<endl;

}

 

void School::Floyd()

{

  int i,j,k;

  for(i=1;i<=10;i++)

   {

    for(j=1;j<=10;j++)

    {

      ShortestDistance[i][j]=distance[i][j];

      Path[i][j]=0;

    }

   }

 

 for(i=1;i<=10;i++)

  {

         for(k=1;k<=10;k++)

      {

            for(j=1;j<=10;j++)

                 {

                         if(ShortestDistance[i][j]>(ShortestDistance[i][k]+ShortestDistance[k][j]))

                      {

                               ShortestDistance[i][j]=ShortestDistance[i][k]+ShortestDistance[k][j];

                           Path[i][j]=k;

                   Path[j][i]=k;

               }

                 }

    }

  }  

}

 

void School::Map()

{

 printf("\n");

 

 printf("                                             ┏━━━━━━━┓\n");

 printf("                                             ┃   9.北门     ┃ \n");

 printf("                                             ┗━━━┳━━━┛\n");

 printf("                                                    ┃ \n");

 printf("                                                    ┃ \n");

 printf("                                                    ┃ \n");

 printf("                                                    ┃                                        ┏━┓\n");

 printf("                                             ┏━━━┻━━━┓                                ┃  ┃\n");

 printf(" ┏━━━━━━━┓                          ┃              ┃                                ┃10┃ \n");

 printf(" ┃              ┃                          ┃              ┃                                ┃东┃\n");

 printf(" ┃    6.老食堂  ┣━━━━━━━┳━━━━━┫   1.图书馆   ┣┳━━━━━━━━━━━━━━━┫  ┃ \n");

 printf("┃              ┃      ┏━━━┻━━━┓  ┃              ┃┃                              ┃门┃\n");

 printf(" ┗━━━┳━━━┛      ┃              ┃  ┃              ┃┃                              ┃  ┃\n");

 printf("         ┃              ┃ 2.A区教学楼  ┃  ┗━━━┳━━━┛┃                              ┃  ┃\n");

 printf("         ┃              ┃              ┃          ┃        ┃                              ┗┳┛\n");

 printf("         ┃              ┗━━━┳━━━┛          ┃        ┃                                ┃ \n");

 printf(" ┏━━━┻━━━┓              ┃                  ┃        ┃                                ┃ \n");

 printf(" ┃              ┃              ┃                  ┃        ┃                                ┃  \n");

 printf(" ┃              ┃              ┃┏━━━━━━━┓┃┏━━━┻━━━┓                        ┃\n");

 printf(" ┃              ┃              ┃┃              ┃┃┃              ┃                        ┃   \n");

 printf(" ┃   7.老操场   ┣━━━━━━━┻┫ 3.B区教学楼  ┣╋┫ 4.经管人文楼 ┣━━━━━━━━━━━━┫  \n");

 printf(" ┃              ┃                ┃              ┃┃┃              ┃                ┏━━━┻━━━┓  \n");

 printf(" ┃              ┃                ┗━━━━━━━┛┃┗━━━┳━━━┛                ┃              ┃ \n");

 printf(" ┃              ┃                                  ┃        ┃                        ┃              ┃  \n");

 printf(" ┗━━━━━━━┛                                  ┃        ┃                        ┃   8.新操场   ┃ \n");

 printf("                                                    ┃        ┃                        ┃              ┃ \n");

 printf("                                                    ┃        ┃                        ┃              ┃\n");

 printf("                                                    ┃┏━━━┻━━━┓                ┃              ┃ \n");

 printf("                                                    ┃┃              ┃                ┗━━━┳━━━┛ \n");

 printf("                                                    ┗┫   5.新食堂   ┣━━━━━━━━━━━━┛\n");

 printf("                                                       ┃              ┃                   \n");

 printf("                                                      ┗━━━━━━━┛               \n");

}

void School::print(int i,int j)

{

 inta,b,k=0;

 a=i;

 b=j;

 inttemp[11];

 cout<<"两地点间最短路径是:"<<endl;

 if(ShortestDistance[i][j]!=MAX)

   {

                 cout<<a;

                 if(i<j)

                 {

                         while(Path[i][j]!=0)

                         {

                                  temp[k++]=Path[i][j];

                                  j=Path[i][j];

                         }

                         for(k=k-1;k>=0;k--)

                        

                                  cout<<"->"<<temp[k];

                        

                 }

                 else

                 {

                         while(Path[i][j]!=0)

                         {

                                  cout<<"->"<<Path[i][j];

                                  i=Path[i][j];

                         }

                 }

                 cout<<"->"<<b<<endl;

   }

        cout<<a<<"号地点"<<"->"<<b<<"号地点"<<"之间的最短距离是"<<ShortestDistance[a][b]<<"米"<<endl;

        cout<<endl;

}

void School::ShortDistance()

{

 inti,j;

 cout<<"请输入要查询的两个地点的编号(1~10的数字编号并用空格间隔):";

 cin>>i>>j;

 Floyd();

 print(i,j);

 

}

int main()

{

        Schoolt;

        chark;

        inti;

 printf("\n\n                         西安石油大学校园问询系统\n");

 printf("        ┏━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

 printf("        ┃编号┃             功            能                       ┃\n");

 printf("        ┣━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");

 printf("        ┃ a  ┃ 查 看 学 校 平 面 图                               ┃\n");

 printf("        ┃ b  ┃ 查 看 地 点 信 息                                  ┃\n");

 printf("        ┃ c  ┃ 查 找 两 地 点 间 最 短 路 径                      ┃\n");

 printf("        ┃ d  ┃ 退 出 该 系 统                                     ┃\n");

 printf("        ┗━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

 printf("输入你的选择:");

 while(k!='d')

   {

   cin>>k;

     switch(k)

     {

            case 'a':;

                         t.Map();

       case 'b':

            cout<<"地点简介查询(请输入1~10):";

            cin>>i;

            t.Introduce(i);

            break;

       case 'c':

            t.ShortDistance();

            break;

            case 'd':;

                          break;

       default:printf("输入错误,请重新输入。\n");

     }

  printf("\n\n请再输入你的选择:");

   }

 printf("是否确认退出?\n\n");

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值