校园导游咨询系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.需求分析
1.1创建结点(旅游景点)
创建该旅游景点是在顺序表中完成的,在顺序表中,首先要创建结点结构体,将该结构体命名为SeqList,成员变量有数组list和size,分别用来表示最大元素个数(即旅游景点的最大个数)和顺序表中当前存储的数据元素个数,顺序表可以完成的功能有求当前数据元素个数,插入数据元素,删除数据元素,取数据元素。
1.2创建图
在构造图的操作中包括结点的插入(实参包括AdjMGraph *G,DataTyp v[],n,RowColWeight E[],e)分别表示在该*G的结构体中的SeqlistVertices[]中插入结点,在*G的结构体中的edge[MaxVertices][MaxVertices]的边数组中插入边信息结点分别为行下标、列下标、权值,该*G的结构体中numOfEdges,e表示边的条数,即将e的值给它。结点的顺序表初始化,在该函数中也应包括一个结构体边信息结构体:成员包括行下标、列下标、权值。并将该结构体命名为RowColWeight。
1.3图的实现
在该函数中要使用SeqList头文件,在该文件中要真正进行插入边和结点。首先在该函数中应该定义一个结构体AdjMGraph,在该结构体的成员变量包括存放结点的顺序表定义为SeqlistVertices[]、存放边的邻接矩阵用edge[MaxVertices][MaxVertices]表示,边的条数numOfEdges。初始化AdjMGraph 中的成员变量线性表和边数及存放边的邻接矩阵。然后在顺序表中插入结点,在邻接矩阵中插入边,删除边,删除结点。取序号为V的结点的第一个邻接结点,取序号为V1的邻接结点V2结点的下一个邻接结点
1.4求最短路径
在该函数中,应该有四个参数,两个位输入参数,分别为带权图G和源点(景点起点)序号v0,两个为输出参数,分别为distance[]和path[],distance[]用来存放达到的从源点v0到其余各结点的最短距离,path[]用来存放最短路径的下标。
1、从江西农业大学的平面地图中选取出6个有代表性的景点。
2、为来访的客人提供图中任意景点的路径查询,即查询任意两个景点之间的最短简单路径。当用户输入正确时,为用户输出任意两景点的最短路径;当用户输入不合法时,提示用户输入有误并返回让用户重新输入。
3、为来访客人推荐参观最短路线。
2.概要设计
1.首先用邻接矩阵存储校园图。
2.用数据结构知识创建校园图。
3.手动给校园图赋上相关信息(景点名称、代号、简介),路径及路径长度。4.利用C语言知识编写查找景点相关信息的程序。
5.利用迪杰斯特拉算法计算任意两点之间的最短路径。
6.最后用一个主函数main输出各项结果。
1.创建校园图:
(1)先定义节点个数N,边的最大值(Maxweight),节点(景点名称、景点信息),邻接点,边,顶点向量,当前顶点数和边数。
(2)先给一个节点赋上其相关信息,然后再用p = (Node)malloc(sizeof(edgenode))语句申请下一结点,再给所申请的节点赋上相关信息,直到节点数为N=6为止。
(3)读入道路的起始点,为邻接矩阵的边赋相应的值。时
(4)节点和边的相关信息都弄好了后,校园图也就创建好了。
2.利用函数Name给10个节点赋上相应的名称,利用函数Information给各节点添加相应的介绍信息。
3.利用函数travgraph来查找景点信息,要查找景点名称时调用Name函数,要查找景点介绍信息时调用Information函数。
4.手动创建一个校园图AdjMGraphgcreat(AdjMGgrph *G),然后为相应的边赋上真正的值。
5.用distance[]数组来存放任意两景点之间的最短路径。
6.用main函数来输出结果:用switch语句分别输出,要创建校园图时调用AdjMGraphgraphcreat函数;查找景点相关信息时调用search函数;要查找任意两景点之间的最短路径时,先输入你目前所在的位置,再输入你的目的地,最后调用path函数。
3.详细设计
#define N 10
#define MAXSize 20 //图中顶点数的最大值
#define MAXedg 30 //图中边数的最大值
#include
#include
#include
#include
typedef int AdjMGraph[ MAXSize][ MAXSize];//存放邻接矩阵的权值信息typedef struct
{
int vexs[ MAXSize];
AdjMGraph s;//
}Matrix_Graph;//图的邻接矩阵表示法。
typedef struct numofedge//
{
int adjvex; //邻接矩阵结点序号
int length; //定义道路长度
char info[10]; //定义景点名称
char info2[100]; //定义景点详细信息
struct numofedge *next;//定义指向下一个结点的指针
}numofedge, *Node ;//将该结构体重新命名为*Node
typedef struct
{
char name[10]; //存储景点的名称数组
char information[100]; //具体的介绍此景点信息数组
struct numofedge *link; //指向下一个景点的指针
}vextices; //创建景点及其信息结构体
typedef struct Edge
{
int lengh; //边的权值,表示路径长度.
int ivex, jvex; //表示两个连接的结点的位置变量
struct Edge *next; //指向下一条边的指针变量
} EdgeType;
//边及其信息.
typedef struct
{
int num; //结点编号。
char name[10]; //结点名称
} vertex;//存放结点信息结构体
typedef struct
{
vertex vexs[ MAXSize]; //存放结点数组元素信息
int edges[ MAXSize][ MAXSize]; //存放边的邻接矩阵
}adjmax,adj; //表示图的结构体
FILE *fp; //文件的读取
void clrscr() //清屏
{
system("cls");
}
void creatgraph(vextices g[],int *n, EdgeType e[],adjmax *adj) //创建校园图vextices g[]表示存放景点信息数组,n表示下一个景点,EdgeType e[]表示存放边的信息数组,adjmax *adj表示下一条边的信息数组
{
int b,i,s,d,len;//b代表结点之间的边数
struct numofedge *p,*q; //定义图的结构体
if((fp = fopen("file.txt","r")) == NULL) //打开文件,对文件进行读的操作
{
printf("文件打开错误!\n");
getchar();//获取景点信息
exit(0);
}
fscanf(fp,"%d %d\n",n,&b); //读入景点个数和边数
for(i = 1; i <= *n; i++)
{
fscanf(fp,"%s %s\n",&g[i].name,&g[i].information);//读入文件中结点(景