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

/*

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

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

 

分步实施:

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]="password",*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;




      }
  }
 

  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
数据结构在公园导游图中起着重要的作用,它可以帮助我们组织和管理景点信息,实现各种功能。以下是一个基本的数据结构和公园导游图的示例: 1. 数据结构: 在设计公园导游图时,可以使用以下数据结构来存储景点信息: - 字典(Dictionary):用于存储景点名称和对应的介绍信息。 - 列表(List):用于存储景点之间的连接关系,例如使用邻接表来表示景点之间的路径。 - 图(Graph):用于表示整个公园景点图,其中每个节点表示一个景点,边表示景点之间的连接关系。 2. 公园导游图示例: 假设我们有一个公园,其中包含以下景点: - A: 公园入口 - B: 花园 - C: 喷泉 - D: 游乐场 - E: 湖泊 - F: 观景台 我们可以使用以下数据结构来表示公园导游图: ```python # 景点介绍信息 spots = { 'A': '这是公园的入口。', 'B': '这是一个美丽的花园。', 'C': '这里有一个漂亮的喷泉。', 'D': '这是一个适合孩子们玩耍的游乐场。', 'E': '这是一个宁静的湖泊。', 'F': '从这里可以欣赏到整个公园的美景。' } # 景点之间的连接关系 connections = { 'A': ['B'], 'B': ['A', 'C'], 'C': ['B', 'D'], 'D': ['C', 'E'], 'E': ['D', 'F'], 'F': ['E'] } ``` 通过上述数据结构,我们可以实现以下功能: - 景点遍历:可以遍历公园中的所有景点,并输出它们的名称和介绍信息。 - 公园地图:可以根据连接关系,输出公园的整体地图。 - 距离计算:可以计算两个景点之间的最短路径或距离。 - 管理系统:可以添加、删除和修改景点信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值