一. 问题描述
根据学校的平面图,寻找一些重要的场所,画出学校的平面图(场所可以根据其重要性适当减少),根据实际画出不同点间的路径,并估算每两个场所间的路径长。设计数据结构并编程,当给出一个出发点和要到达另外一个场所的信息时,给出最佳路径,并输出路径相关信息。
二. 问题分析
设计一个校园导游程序,为来访的客人提供各种信息查询服务。为来访客人提供图中任意景点相关信息的查询。为来访客人提供图中任意景点相关信息的查询。
三. 逻辑结构和存储结构设计
结构体的定义:
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(+)
(2)voidDijkstra(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]