题0

来源:互联网 发布:淘宝个人信用等级提高 编辑:程序博客网 时间:2024/06/07 05:39
#define Hello      10000       #define Max_Vertex_Num      40 #define MAX 40 #include<cstdlib> #include<cstring> #include <iostream> using namespace std; #include <iomanip> typedef struct Load {   int adj;       } Load,AdjMatrix[Max_Vertex_Num][Max_Vertex_Num];  typedef struct    {   char name[30];  int num;  }infotype; typedef struct  {  infotype vexs[Max_Vertex_Num]; AdjMatrix arcs;  int vexnum,arcnum;  }  MGraph;  MGraph b;  MGraph InitGraph(void);  void Menu(void);  void Browser(MGraph *G);  void Dijk(MGraph * G); void Floyd(MGraph *G); void main(void) {   system("mode con: cols=100 lines=40"); int i;  b=InitGraph();  Menu();  cin>>i;  while(i!=5)  {   switch(i)  {    case 1:system("cls"); Browser(&b); Menu(); break;    case 2:system("cls"); Dijk(&b); Menu(); break;  case 3:system("cls"); Floyd(&b); Menu(); break;   case 4:exit(1); break;   default:break;  }   cin>>i;  } }  MGraph InitGraph(void) {   MGraph G;  int i,j;   G.vexnum=14;  G.arcnum=17;         for(i=0;i<G.vexnum;i++)   G.vexs[i].num=i;   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[12].name,"东区足球场 ");   strcpy(G.vexs[13].name,"溜冰场"   ); for(i=0;i<G.vexnum;i++)    for(j=0;j<G.vexnum;j++)  G.arcs[i][j].adj=Hello; G.arcs[0][1].adj=50;  G.arcs[0][2].adj=100; G.arcs[1][3].adj=120; G.arcs[1][5].adj=120; G.arcs[1][6].adj=80; G.arcs[0][6].adj=200;;  G.arcs[2][3].adj=30;  G.arcs[2][5].adj=60;  G.arcs[3][4].adj=10;  G.arcs[4][11].adj=100;  G.arcs[5][6].adj=50;   G.arcs[6][7].adj=20;  G.arcs[7][8].adj=70;  G.arcs[8][9].adj=140; G.arcs[9][10].adj=600;  G.arcs[10][12].adj=250;  G.arcs[11][12].adj=200;  for(i=0;i<G.vexnum;i++)   for(j=0;j<G.vexnum;j++) G.arcs[j][i].adj=G.arcs[i][j].adj; return G;  } void Menu() {  cout<<"                      Welcome To 广东海洋大学         "<<endl;cout<<"                     请选择能为您做到的服务:              "<<endl;cout<<"                          1.浏览各景点                   "<<endl; cout<<"                          2.查看所有游览路线                    "<<endl;cout<<"                          3.选择出发点和目的地                  "<<endl; cout<<"                          4.退出系统                            "<<endl; cout<<"                      请选择能为您做到的服务: "; } void Browser(MGraph *G) { int v;  cout<<"┃编号┃景点名称                                                                       "<<endl; for(v=0;v<G->vexnum;v++) cout<<"("<<G->vexs[v].num<<")"<<G->vexs[v].name<<endl;  }  void Dijk(MGraph * G) {   int v,w,i,min,t=0,x,flag=1,v0;    int final[20], D[20], p[20][20];  cout<<"┃编号┃景点名称          "<<endl;  for(v=0;v<G->vexnum;v++)  cout<<"┃"<<G->vexs[v].num<<"┃"<<G->vexs[v].name<<endl;  while(flag)  {   cout<<"请输入一个起始景点编号:";   cin>>v0;   if(v0<0||v0>G->vexnum)  {     cout<<"景点编号不存在!请重新输入景点编号:";   cin>>v0;   }    if(v0>=0&&v0<G->vexnum)  flag=0;  }   for(v=0;v<G->vexnum;v++)  {      final[v]=0;  D[v]=G->arcs[v0][v].adj;  for(w=0;w<G->vexnum;w++)  p[v][w]=0;   if(D[v]<Hello)   {    p[v][v0]=1;p[v][v]=1;  }   }  D[v0]=0;final[v0]=1;  for(i=1;i<G->vexnum;i++)  {    min=Hello;   for(w=0;w<G->vexnum;w++)  if(!final[w])     if(D[w]<min){v=w;min=D[w];}   final[v]=1;    for(w=0;w<G->vexnum;w++)   if(!final[w]&&(min+G->arcs[v][w].adj<D[w]))   {     D[w]=min+G->arcs[v][w].adj;  for(x=0;x<G->vexnum;x++)     p[w][x]=p[v][x];  p[w][w]=1;   }  }   for(v=0;v<G->vexnum;v++)  {    if(v0!=v) cout<<G->vexs[v0].name;  for(w=0;w<G->vexnum;w++)   {     if(p[v][w]&&w!=v0) cout<<"-->"<<G->vexs[w].name; t++;   }   if(t>G->vexnum-1&&v0!=v) cout<<"    这是最短路线,总长为:"<<D[v]<<"米"<<endl;  }  }  void Floyd(MGraph *G) {   int v,u,i,w,k,j,flag=1,p[14][14][14],D[14][14]; cout<<"┃编号┃景点名称  "<<endl;  for(v=0;v<G->vexnum;v++) cout<<"┃"<<G->vexs[v].num<<"┃"<<G->vexs[v].name<<endl;  for(v=0;v<G->vexnum;v++)   for(w=0;w<G->vexnum;w++)   {     D[v][w]=G->arcs[v][w].adj;  for(u=0;u<G->vexnum;u++)    p[v][w][u]=0;    if(D[v][w]<Hello)  {     p[v][w][v]=1;p[v][w][w]=1;  }  }   for(u=0;u<G->vexnum;u++)  for(v=0;v<G->vexnum;v++)  for(w=0;w<G->vexnum;w++)  if(D[v][u]+D[u][w]<D[v][w])  {       D[v][w]=D[v][u]+D[u][w];  for(i=0;i<G->vexnum;i++)  p[v][w][i]=p[v][u][i]||p[u][w][i];  }   while(flag)  {  cout<<"请输入您当前的位置和目的地的编号(用空格隔开):";  cin>>k>>j;   if(k<0||k>G->vexnum||j<0||j>G->vexnum)   {   cout<<"景点编号不存在!请重新输入出发点和目的地的编号:";      cin>>k>>j;   }   if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)    flag=0; }  cout<<G->vexs[k].name;for(u=0;u<G->vexnum;u++)  if(p[k][j][u]&&k!=u&&j!=u) cout<<"-->"<<G->vexs[u].name;cout<<"-->"<<G->vexs[j].name<<endl;cout<<" 这是最短路线,总长为:"<<D[k][j]<<"米"<<endl; } 

0 0
原创粉丝点击