校园导游咨询

来源:互联网 发布:sai绘图软件怎么下载 编辑:程序博客网 时间:2024/04/28 17:23
 
//=========================================================================================
//
// 05软件 jacklam
// 校园导游咨询
// map.cpp
//=========================================================================================
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
//-----------------------------------------------------------------------------------------
//-------------------------------图邻接矩阵存储表示----------------------------------------
#define infinity 1000
#define max_vertex_num 20
typedef int PathMatrix;
typedef int DistancMatrix;
typedef struct infotype
{
char str[80];
}infotype;
typedef struct arccell
{
int adj;
infotype info;
}arccell,adjmatrix[max_vertex_num][max_vertex_num];
typedef struct vexname
{
char name[30];
char info[80];
}vexname;
typedef struct
{
vexname vexs[max_vertex_num];
adjmatrix arcs;
int vexnum,arcnum;
}mgraph;
//-----------------------------------------------------------------------------------------
//-------------------------------------创建无向网------------------------------------------
CreateUDN(mgraph &g)
{
g.vexnum=12;g.arcnum=18;
strcpy(g.vexs[0].name,"南门");strcpy(g.vexs[1].name,"学术交流中心");
strcpy(g.vexs[2].name,"学生活动中心");
strcpy(g.vexs[3].name,"图书馆");strcpy(g.vexs[4].name,"西楼");
strcpy(g.vexs[5].name,"行政楼");
strcpy(g.vexs[6].name,"东楼");strcpy(g.vexs[7].name,"四堂");
strcpy(g.vexs[8].name,"后勤集团");
strcpy(g.vexs[9].name,"紫竹苑");strcpy(g.vexs[10].name,"紫薇苑");
strcpy(g.vexs[11].name,"紫荆苑");
strcpy(g.vexs[0].info,"学校的大门,进入南区");
strcpy(g.vexs[1].info,"进行学术交流的地方");
strcpy(g.vexs[2].info,"学生会,社团等活动的中心");
strcpy(g.vexs[3].info,"韶关学院图书馆,学校的重点,中心点");
strcpy(g.vexs[4].info,"西楼是教学楼,在行政楼西边");
strcpy(g.vexs[5].info,"行政楼,学校办公人员办公的地方");
strcpy(g.vexs[6].info,"东楼是教学楼,在行政楼的东边");
strcpy(g.vexs[7].info,"四堂,学校第四食堂,也可算老师与学生共用的食堂");
strcpy(g.vexs[8].info,"后勤集团,负责学校后勤人员工作的地方");
strcpy(g.vexs[9].info,"紫竹苑,学生宿舍(男),费用一年1000元");
strcpy(g.vexs[10].info,"紫薇苑,学生宿舍(女),费用一年1500元,学校的模范苑");
strcpy(g.vexs[11].info,"紫荆苑,学生宿舍(男),费用一年1500元");
for(int i=0;i<g.vexnum;i++)
  for(int j=0;j<g.vexnum;j++)
  {
   g.arcs[i][j].adj=infinity;
  }
g.arcs[0][1].adj=10;g.arcs[0][2].adj=12;g.arcs[1][3].adj=8;
strcpy(g.arcs[0][1].info.str,"南门<-->学术交流中心");
strcpy(g.arcs[0][2].info.str,"南门<-->学生活动中心");
strcpy(g.arcs[1][3].info.str,"学术交流中心<-->图书馆");
g.arcs[1][0]=g.arcs[0][1];g.arcs[2][0]=g.arcs[0][2];g.arcs[3][1]=g.arcs[1][3];
g.arcs[0][5].adj=10;g.arcs[3][4].adj=8;g.arcs[4][5].adj=4;
strcpy(g.arcs[0][5].info.str,"南门<-->行政楼");
strcpy(g.arcs[3][4].info.str,"图书馆<-->西楼");
strcpy(g.arcs[4][5].info.str,"西楼<-->行政楼");
g.arcs[5][0]=g.arcs[0][5];g.arcs[4][3]=g.arcs[3][4];g.arcs[5][4]=g.arcs[4][5];
g.arcs[5][6].adj=4;g.arcs[6][2].adj=8;g.arcs[6][9].adj=8;
strcpy(g.arcs[5][6].info.str,"行政楼<-->东楼");
strcpy(g.arcs[6][2].info.str,"东楼<-->学生活动中心");
strcpy(g.arcs[6][9].info.str,"东楼<-->紫竹苑");
g.arcs[6][5]=g.arcs[5][6];g.arcs[2][6]=g.arcs[6][2];g.arcs[9][6]=g.arcs[6][9];
g.arcs[7][4].adj=4;g.arcs[7][8].adj=4;g.arcs[8][4].adj=4;
strcpy(g.arcs[7][4].info.str,"四堂<-->西楼");
strcpy(g.arcs[7][8].info.str,"四堂<-->后勤集团");
strcpy(g.arcs[8][4].info.str,"后勤集团<-->西楼");
g.arcs[4][7]=g.arcs[7][4];g.arcs[8][7]=g.arcs[7][8];g.arcs[4][8]=g.arcs[8][4];
g.arcs[9][8].adj=6;g.arcs[10][9].adj=6;g.arcs[11][2].adj=10;
strcpy(g.arcs[9][8].info.str,"紫竹苑<-->后勤集团");
strcpy(g.arcs[10][9].info.str,"紫薇苑<-->紫竹苑");
strcpy(g.arcs[11][2].info.str,"紫荆苑<-->学生活动中心");
g.arcs[8][9]=g.arcs[9][8];g.arcs[9][10]=g.arcs[9][8];g.arcs[2][11]=g.arcs[11][2];
g.arcs[11][10].adj=4;g.arcs[10][7].adj=12;g.arcs[7][3].adj=6;
strcpy(g.arcs[11][10].info.str,"紫荆苑<-->紫薇苑");
strcpy(g.arcs[10][7].info.str,"紫薇苑<-->四堂");
strcpy(g.arcs[7][3].info.str,"四堂<-->图书馆");
g.arcs[10][11]=g.arcs[11][10];g.arcs[7][10]=g.arcs[10][7];g.arcs[3][7]=g.arcs[7][3];
return 1;
}//----------------------------------------------------------------------------------------
//-------------------------------------输出无向网------------------------------------------
PrintUDN(mgraph g)
{
int i;
cout<<"请输入其代码,查询其相关信息:";
cin>>i;
cout<<"这是它的相关信息:"<<endl;
cout<<g.vexs[i].info;
return 1;
}//----------------------------------------------------------------------------------------
//-------------------------------查询点到点的最短路径--------------------------------------
SearchUDN(mgraph G,PathMatrix Path[max_vertex_num][max_vertex_num][max_vertex_num],DistancMatrix Dist[max_vertex_num][max_vertex_num])
{  
int l,m;
cout<<"/n请输入景点代码,寻找最短路径:(eg:1 3)"<<endl;
cin>>l>>m;
int i,u,v,w;
//int j;
    for(v=0;v<G.vexnum;++v)
  for(w=0;w<G.vexnum;++w)
  { Dist[v][w]=G.arcs[v][w].adj;
      for(u=0;u<G.vexnum;++u)
      Path[v][w][u]=0;
         if(Dist[v][w]<infinity)
   {  Path[v][w][v]=1;
         Path[v][w][w]=1;
   }//end of if
  }//end of for
for(u=0;u<G.vexnum;++u)
  for(v=0;v<G.vexnum;++v)
   for(w=0;w<G.vexnum;++w)
     if(Dist[v][u]+Dist[u][w]<Dist[v][w])
     {  
      Dist[v][w]=Dist[v][u]+Dist[u][w];
        for(i=0;i<G.vexnum;++i)
     {
      Path[v][w][i]=Path[v][u][i]||Path[u][w][i];
     }
     }//end of if
­
    //------- print the last Dist[i][j]-----
  /* printf("Vertice");
      for(i=0;i<G.vexnum;i++)
         printf("%5d",i);
      printf("/n");  
   for(i=0;i<G.vexnum;i++)
   { printf("%5d  ",i);
     for(j=0;j<G.vexnum;j++)
       printf("%5d",Dist[i][j]);
     printf("/n");
   }//end of for(i=0;i<G.vexnum;i++)
   printf("/n");*/
//--------------------------------------  
   cout<<"这是它所要走的路线:"<<endl;
   for(i=0;i<G.vexnum;++i)
   {
    if(Path[l][m][i])
    cout<<G.vexs[i].name<<"  ";
   }
   cout<<endl;
cout<<G.vexs[l].name<<"<-->"<<G.vexs[m].name<<"需要 "<<Dist[l][m]<<"km"<<endl;
return 1;
}//----------------------------------------------------------------------------------------
//-------------------------------------学校地图--------------------------------------------
PrintMap()
{
cout<<"                             韶关学院南区地图  (单位:KM)                         "<<endl;
cout<<"                                                                                 "<<endl;
cout<<"                                                                                 "<<endl;
cout<<"                                                                                 "<<endl;
cout<<"                                                                                 "<<endl;
cout<<"                                                                                 "<<endl;
cout<<"              |-----10------------南门----------------12------------------|      "<<endl;
cout<<"              |                    |                                学生活动中心 "<<endl;
cout<<"  --------学术交流                 |10                                  |        "<<endl;
cout<<"  |                                |                                    |        "<<endl;
cout<<"  |        8                       |                        8           |        "<<endl;
cout<<" 8|  |------------西楼- -- 4 - -行政楼- -- 4 - -东楼--------------------|        "<<endl;
cout<<"  |  |            |   |                            |                   |         "<<endl;
cout<<"  |  |    7     4|     |4                          |8                 || 10      "<<endl;
cout<<" 图书管-------| |   4   |            6             |                 ||          "<<endl;
cout<<"              四堂-----后勤----------------------紫竹               ||           "<<endl;
cout<<"               |                                   |               ||            "<<endl;
cout<<"               |                                   |6             ||             "<<endl;
cout<<"               |              12                   |          |——              "<<endl;
cout<<"               |===================================紫薇-—4—紫荆                "<<endl;
return 1;
}//----------------------------------------------------------------------------------------
//-------------------------------------主函数----------------------------------------------
main()
{
mgraph g;
PathMatrix Path[max_vertex_num][max_vertex_num][max_vertex_num];
DistancMatrix Dist[max_vertex_num][max_vertex_num];
PrintMap();
CreateUDN(g);
cout<<"这是学校景点的代码:"<<endl;
for(int i=0;i<g.vexnum;i++)
{
  cout<<i<<":"<<g.vexs[i].name<<"  ";
  if(i%4==0)
   cout<<endl;
}
cout<<endl;
PrintUDN(g);
gofor:
SearchUDN(g,Path,Dist);
goto gofor;
return 1;
}//========================================================================================
­
原创粉丝点击