校园导游咨询系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);//读入文件中结点(景

相关文档
最新文档