数据结构课程设计

本文介绍了一款基于数据结构的校园导游程序,利用迪杰斯特拉算法求解最短路径。程序展示了广东海洋大学的平面图,用户可以查询任意两点间最短路径及景点信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.   问题描述

根据学校的平面图,寻找一些重要的场所,画出学校的平面图(场所可以根据其重要性适当减少),根据实际画出不同点间的路径,并估算每两个场所间的路径长。设计数据结构并编程,当给出一个出发点和要到达另外一个场所的信息时,给出最佳路径,并输出路径相关信息。

二.  问题分析

设计一个校园导游程序,为来访的客人提供各种信息查询服务。为来访客人提供图中任意景点相关信息的查询。为来访客人提供图中任意景点相关信息的查询。

三.  逻辑结构和存储结构设计

结构体的定义:

typedefstruct VertexType{

    int number;

    char *sight;

 }VertexType;

 

typedefstruct{

    VertexType vex[NUM];

       int arcs[NUM][NUM];

       int vexnum;

}MGraph;

 

常量的定义:

#define Max 32767

#define NUM 1

各个函数的定义:

void CreateMGraph(int v)   //创建图的函数,其中v表示图中的顶点数

void Map()     //地图展示函数,用于输出广东海洋大学的平面简略图

char Menu()    //主菜单显示于操作界面

void Info()    //资料介绍函数,用于当用户选择查询地点资料时输出地点的资料信息

void Dijkstra(int num)   //迪杰斯特拉函数

void Display(int sight1,int sight2)    //地图展示函数

void main()    //主函数的定义

 

四.  算法设计

求最短路径算法流程图

 

五.  时间复杂度和空间复杂度分析

(1) VoidCreateMGraph(int v)

其中为顶点赋值用了一次for循环,为邻接矩阵赋值用了两次for循环且相互嵌套,故时间复杂度为O+

(2voidDijkstra(int num)

其中为置空初始值用了两次for循环且相互嵌套,更新路径长度用了四次for循环且相互嵌套,故其时间复杂度为O()

(3) VoidDisplay(int sight1,int sight2)

其中输出最短路径用了两次for循环且相互嵌套,故时间复杂度为O()

 

六.  源代码

   #include <stdio.h>

#include<string.h>

#include<stdlib.h>

#defineMax 32767

#defineNUM 15

 

typedefstruct VertexType{

   int number;

   char *sight;

}VertexType;

 

typedefstruct{

   VertexType vex[NUM];

   int arcs[NUM][NUM];

   int vexnum;

}MGraph;

 

MGraphG;

 

intP[NUM][NUM];

 

longint D[NUM];//

 

 

 

voidCreateMGraph(int v)//创建图的函数

{

   int i,j;

   G.vexnum=v;

   for(i=1;i<G.vexnum;++i)

      G.vex[i].number=i;

   G.vex[0].sight="各个景点名字";

   G.vex[1].sight="广东海洋大学校大门";

   G.vex[2].sight="水生博物馆";

   G.vex[3].sight="教工饭堂";

   G.vex[4].sight="第一饭堂";

   G.vex[5].sight="足球场";

   G.vex[6].sight="第二饭堂";

   G.vex[7].sight="主楼";

   G.vex[8].sight="科技楼";

   G.vex[9].sight="图书馆";

   G.vex[10]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值