公园的导游图(利用简便方法实现五个景点的遍历)

/*

功能:给出一张某公园的导游图,游客通过终端询问可知:

从某一景点到另一景点的最短路径。游客从公园大门进入,选一条最佳路线,使游客可以不重复地游览各景点,最后回到出口(出口就在入口旁边)。

 

分步实施:

1. 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2. 完成最低要求:建立一个文件,包括5景点情况,能完成遍历功能;

3. 进一步要求:进一步扩充景点数目,画出景点图,有兴趣的同学可以自己扩充系统功能。

 

*/

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#define MaxVertexNum 100

#define MaxCost 9999

typedef char VertexType;

typedef int  EdgeType;

typedef struct

   { VertexType vexs[MaxVertexNum];

       /* 存放顶点信息 */

      EdgeType  edges[MaxVertexNum][MaxVertexNum];

/* 存放邻接关系 */

      int  n,e; /*顶点数和边数*/

}Mgraph;

void mune();                //主菜单界面

void floyd(Mgraph G,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum]);       //指定距离的弗洛伊德

void opfloy(int n,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum]);         //指定距离的输出

void hamanzi(Mgraph *G);        //从起点开始遍历的函数。

void CreateMGraph(Mgraph *G);      //建立图的函数

void printph();

void look();

int main()

{

    Mgraph G;

    int n,D[MaxVertexNum][MaxVertexNum],P[MaxVertexNum][MaxVertexNum];

    int a;

    char b[100];

    char user[20],mana[20]=”chenjian”,*q,*p,m=0;//依次是登录者,管理者,指针来判断登录账号是否是管理者。

        system(“color f0”);

   L: printf(“\t     ***************************************************\n”);

    printf(“\t请登录(输入你的用户名):”);

    scanf(“%s”,user);

    p=user;

    q=mana;

    while(*p==*q)//用来判断登陆者是否为管理者的部分

    {

        m=1;

        p++;

        q++;

        if(*q==’\0′)

            break;

    }

    if(*p!=*q)

        m=0;

    /******************************************************************/

    if(m==1)

    {

        printf(“”);

    CreateMGraph(&G);

    system(“cls”);

   L1: mune();

    printf(“请输入您的选项\n”);

    scanf(“%d”,&a);

    switch(a)

    {

        case 1:

                floyd(G,D,P);

                opfloy(G.n,D,P);

                system(“pause”);

                system(“cls”);

                a=35421568;

                goto L1;

        case 2:

                hamanzi(&G);

                system(“pause”);

                system(“cls”);

                a=35421568;

                goto L1;

        case 3:

                printph();

                system(“pause”);

                system(“cls”);

                a=35421568;

                goto L1;

        case 4:

                look();

                system(“cls”);

                a=35421568;

                goto L1;

        case 0:

                break;

        default:

                printf(“您输入有误,请重新输入!!!\n”);

                system(“pause”);

                gets(b);

                a=35421568;

                system(“cls”);

                goto L1;

    }

    }

    else

    {

          //CreateMGraph(&G);

        system(“cls”);

        L3:

        printf(“\t\t\t您不是管理者无法对景点信息进行修改.”);

        printf(“**********************************************************************************\n”);

        printf(“\t\t\t——–公园导游系统——-\n”);

        printf(“\t\t\t   1:去指定的景点\n”);

        printf(“\t\t\t   2:遍历全部景点\n”);

        printf(“\t\t\t   3:查看公园的全图\n”);

        printf(“\t\t\t   4:查看景点介绍\n”);

        printf(“\t\t\t   5:返回登陆界面\n”);

        printf(“\t\t\t   0:退出\n”);

        printf(“**********************************************************************************\n”);

        printf(“请输入您的选项\n”);

        scanf(“%d”,&a);

        switch(a)

        {

            case 1:

                    floyd(G,D,P);

                    opfloy(G.n,D,P);

                    system(“pause”);

                    system(“cls”);

                    a=35421568;

                    goto L3;

            case 2:

                    hamanzi(&G);

                    system(“pause”);

                    system(“cls”);

                    a=35421568;

                    goto L3;

            case 3:

                    printph();

                    system(“pause”);

                    system(“cls”);

                    a=35421568;

                    goto L3;

            case 4:

                    look();

                    system(“cls”);

                    a=35421568;

                    goto L3;

            case 5:

                    a=35421568;

                    system(“cls”);

                    goto L;

            case 0:

                    break;

            default:

                    printf(“您输入有误,请重新输入!!!\n”);

                    system(“pause”);

                    gets(b);

                    a=35421568;

                    system(“cls”);

                    goto L3;

        }

    }

    return 0;

}

void mune()

{

    printf(“**********************************************************************************\n”);

    printf(“\t\t\t——–公园导游系统——-\n”);

    printf(“\t\t\t   1:去指定的景点\n”);

    printf(“\t\t\t   2:遍历全部景点\n”);

    printf(“\t\t\t   3:查看公园的全图\n”);

    printf(“\t\t\t   4:查看景点介绍\n”);

    printf(“\t\t\t   0:退出\n”);

     printf(“**********************************************************************************\n”);

}

void floyd(Mgraph G,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum])

  { int i,j,k;

    for(i=0;i<G.n;i++)

     for(j=0;j<G.n;j++)

      {D[i][j]=G.edges[i][j];

       if ((D[i][j]<MaxCost)&&(D[i][j]!=0))

         P[i][j]=j;

       else

         P[i][j]=-1;

      }

    for(i=0;i<G.n;i++)

      D[i][i]=0;

    for(k=0;k<G.n;k++)

      for(i=0;i<G.n;i++)

    for(j=0;j<G.n;j++)

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

        {D[i][j]=D[i][k]+D[k][j];

         P[i][j]=P[i][k];  /* i到j的路径上i的后继顶点改为i到k路径上i的后继顶点 */

         }

  }

  void opfloy(int n,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum])

     {int i,j,k,c,m,p,min,next;

     printf(“请输入您现在的位置和将去的位置如(m,p)\n”);

     scanf(“%d,%d”,&m,&p);

     i=m;

     j=p;

      // for (i=0;i<n;i++)

    // printf(“\n\n源点为v%d:”,i);

     // for (j=0;j<n;j++)

        if (j!=i)

        {printf(“\n%d到%d应按如下行走 , 最近距离为:\n”,i,j);

         printf(“%d”,i);

         next=P[i][j];

         while (next!=-1)

        {printf(“->%d”,next);

         next=P[next][j];  }

         if (D[i][j]==MaxCost)

         printf(“->%d”,j);

         printf(“\t%d”,D[i][j]); }

   }

void hamanzi(Mgraph *G)

   {

       int i,j,m,wei[5],sum=0,min=100,end[5],zui[6];

       int q,w,t,r;

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

       {

           end[i]=0;

       }

       printf(“请输入你的起点。\n”);

       scanf(“%d”,&m);

       for(q=0;q<5;q++)

       {

           end[m]=1;

           end[q]=1;

           for(w=0;w<5;w++)

           {

               end[w]=1;

               for(t=0;t<5;t++)

               {

                   end[t]=1;

                   for(r=0;r<5;r++)

                   {

                       end[r]=1;

                       sum=G->edges[m][q]+G->edges[q][w]+G->edges[w][t]+G->edges[t][r]+G->edges[r][m];

                       end[m]=1;

                       end[q]=1;

                       end[w]=1;

                       end[t]=1;

                       end[r]=1;

                       if(min>sum&&end[0]==1)

                       {

                          if(end[1]==1&&end[2]==1)

                          {

                              if(end[3]==1&&end[4]==1)

                              {

                                   min=sum;

                                   zui[1]=q;

                                   zui[2]=w;

                                   zui[3]=t;

                                   zui[4]=r;

                                   zui[5]=m;

                              }

                          }

                       }

                       sum=200;

                       end[r]=0;

                   }

                   end[t]=0;

               }

                end[w]=0;

           }

            end[q]=0;

       }

       printf(“最小为:%d\n”,min);

       printf(“应按照如下浏览:\n”);

       printf(“%d”,m);

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

       {

           printf(“->%d”,zui[i]);

       }

   }

void CreateMGraph(Mgraph *G)

  {int i,j,k,w;

    printf(“请输入顶点数和边数(输入格式为:顶点数,边数):\n”) ;

    scanf(“%d,%d”,&(G->n),&(G->e));

    printf(“请输入顶点信息:\n”);

    for(i=0;i<G->n;i++)

        scanf(“\n%c”,&(G->vexs[i]));

    for(i=0;i<G->n;i++)

        for(j=0;j<G->n;j++)

            G->edges[i][j]=MaxCost;

    printf(“请输入每条边对应的两个顶点的序号(输入格式为:i,j,w):\n”);

              for(k=0;k<G->e;k++)

                   { scanf(“%d,%d,%d”,&i,&j,&w);

                         G->edges[i][j]=w;  }

  }

  void printph()

  {

    printf(“公园地图为:\n”);

    printf(“\t\t\t\t0* * * * * * 1\n”);

    printf(“\t\t\t\t**          **\n”);

    printf(“\t\t\t\t* *        * *\n”);

    printf(“\t\t\t\t*  *      *  *\n”);

    printf(“\t\t\t\t*   *    *   *\n”);

    printf(“\t\t\t\t*    *  *    *\n”);

    printf(“\t\t\t\t*      2     *\n”);

    printf(“\t\t\t\t*     *      *\n”);

    printf(“\t\t\t\t*    *       *\n”);

    printf(“\t\t\t\t*   *        *\n”);

    printf(“\t\t\t\t*  *         *\n”);

    printf(“\t\t\t\t* *          *\n”);

    printf(“\t\t\t\t4* * * * * * 3\n”);

  }

  void look()

  {

      int a;

      char b[100];

      system(“cls”);

    L2:

      printf(“\t\t\t   1:曲江池\n”);

      printf(“\t\t\t   2:大唐芙蓉园\n”);

      printf(“\t\t\t   3:陕西省博物馆\n”);

      printf(“\t\t\t   4:西安理工大学喷泉\n”);

      printf(“\t\t\t   5:法门寺\n”);

      printf(“\t\t\t   0:退回主界面\n”);

      printf(“请输入您的选择。\n”);

      scanf(“%d”,&a);

      switch(a)

      {

      case 1:

            printf(“曲江池遗址公园,北接大唐芙蓉园,南至秦二世陵遗址,占地面积1500亩。从唐曲江池遗址、\n秦二世皇帝墓等文物古迹的保护性开发、城市功能配套和区域生态环境建设的角度出发,\n依托周边丰富的旅游文化资源和人文传统,恢复性再造曲江南湖、曲江流饮、\n汉武泉、宜春苑、凤凰池等历史文化景观,再现曲江地区“青林重复,\n绿水弥漫”的山水人文格局,构建集生态环境重建、观光休闲娱乐、现代商务会展等功能\n为一体的综合性城市生态和娱乐休闲区。\n”);

            system(“pause”);

            system(“cls”);

            a=65944899;

            goto L2;

      case 2:

            printf(“西安大唐芙蓉园是国家AAAAA级旅游景区,全国首个全方位展示盛唐风貌的大型皇家园林式文化主\n题公园,是首个五感(即视觉、听觉、嗅觉、触觉、味觉)主题公园,拥有全球最大户\n外香化工程以及全球最大的水景表演展示。\n”);

            system(“pause”);

            system(“cls”);

            a=65944899;

            goto L2;

      case 3:

            printf(“陕西历史博物馆位于西安大雁塔的西北侧,筹建于1983年,1991 年6月20日落成开放,是它的建成\n标志着中国博物馆事业迈入了新的发展里程。这座馆舍为中央殿堂、四隅崇楼的唐风\n建筑群,主次井然有序,高低错落有致,气势雄浑庄重,融民族传统、地方特色\n和时代精神于一体。\n”);

            system(“pause”);

            system(“cls”);

            a=65944899;

            goto L2;

      case 4:

            printf(“西安理工大学(Xi’an University of Technology)简称“西理工”,坐落于古都西安,是国家“中西\n部高校基础能力建设工程”重点建设大学\n”);

            system(“pause”);

            system(“cls”);

            a=65944899;

            goto L2;

      case 5:

            printf(“法门寺,又称法云寺,位于中国陕西省宝鸡市扶风县法门镇,有“关中塔庙始祖之称”。\n”);

            system(“pause”);

            system(“cls”);

            a=65944899;

            goto L2;

      case 0:

          break;

      default:

            printf(“您的输入有误!!!”);

            system(“pause”);

            gets(b);

            system(“cls”);

            a=65944899;

            goto L2;

      }

  }

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/CJ_xiaoni/article/details/51829532
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞