校园导游咨询

一、问题描述

1   题目内容:校园导游咨询(为来访的客人提供各种信息服务)

2   基本要求:

1、设计淮阴师范学院北校区平面图,在校园景点不低于10个。以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。

2、为来访客人提供图中任意景点相关信息的查询。

3、为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。

二、需求分析

1   本程序的功能包括校园地图的建立,景点的信息查询,最短路径查询,所有路径的输出,所有路径的长度的输出以及退出系统等。

2   程序运行后显现提示信息,等候用户输入0—4以进入相应的操作功能。

3   用户输入数据完毕,程序将输出运行结束。

4   测试数据应为景点的代号,景点之间的最短路径,景点的名称。

三、概要设计

1   带头结点的无向图数据类型定义为:

数据集合

vertex a[Maxsize];景点信息

    int arc[Maxsize][Maxsize];两点距离

    int vertexNum, arcNum;景点数,边数

    int dist[Maxsize][Maxsize];最短路径长度

    string path[Maxsize][Maxsize];最短路径

操作集合:

       (1) MGraph(int n, int e);初始化数据

       (2) void Seek(int i);景点信息查询

       (3) void Floyd();初始化路径和路径长度

       (4) void Allpaths();输出所有路径

       (5) void Allpathlengths();输出所有路径长度

       (6) void Printshortpath();最短路径的查询

四、数据结构设计

1   元素类型,结点类型,指针类型

   typedef struct

{

    string code;

    string name;

    string intro;

}vertex;

五、算法设计

  1、算法分析(必须要用语言进行描述)

       整个程序主要的算法体现在最短路径,所以我们初始化最短路径以及最短路径长度,计算任意两点之间的最短路径。

  2、算法实现 

void MGraph::Floyd()

{

    int i, j, k;

    for (i = 0; i < vertexNum; i++)         

        for (j = 0; j < vertexNum; j++)

        {

            dist[i][j] = arc[i][j];

            if (dist[i][j] != 10000)

                path[i][j] = a[i].code + a[j].code;

            else path[i][j] = " ";

        }

    for (k = 0; k < vertexNum; k++)              

        for (i = 0; i < vertexNum; i++)

            for (j = 0; j < vertexNum; j++)

                if (dist[i][k] + dist[k][j] < dist[i][j])

                {

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

                    path[i][j] = path[i][k] + "-" + path[k][j];

                }

}

3、算法流程图

六、程序测试与实现

1、函数之间的调用关系

2、主程序

  int main()

{

    MGraph m(11, 18);

    meau();

    int choice;

    while (true)

    {

        cout << "请输入您要执行功能的编号:";

        cin >> choice;

        switch (choice)

        {

        case 1:

            cout << "****************************************" << endl;

            cout << "***景点代号:                        ***" << endl;

                 cout << "***a南苑食堂  b操场       c生化楼    ***" << endl;

               cout << "***d崇文楼    e教科学院   f音乐学院  ***" << endl;

                 cout << "***g图书馆    h体育学院   i南门      ***" << endl;

                 cout << "***j北门      k弘文楼                ***" << endl;

            cout << "****************************************" << endl;

            cout << "编号如上图,请输入您要查询景点的编号:";

            int code;

            cin >> code;

            m.Seek(code);

            break;

        case 2:m.Floyd();

            m.Printshortpath();

            break;

        case 3:m.Floyd();

            m.Allpaths();

            break;

        case 4:m.Floyd();

            m.Allpathlengths();

            break;

        case 0:return 0;

        default:

            cout << "输入非法,已退出程序";

            return 0;

            break;

        }

    }

    return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值