数据结构课程设计报告(校园导游图 )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
课程设计报告
设计题目:校园导游图
专业计算机(信息处理)
学号********
姓名王强荣
2009 年7 月8 日一、设计题目:校园导游咨询。
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
二、设计要求(内容)
(1)设计你所在的学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点的名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的最短的简单路径。
三、设计思路:
1.首先用邻接矩阵存储校园图。
2.用数据结构知识创建校园图。
3.手动给校园图赋上相关信息(景点名称、代号、简介),路径及路径长度。得到一个模拟的校园图:
4.利用C语言知识编写查找景点相关信息的程序。
5.利用迪杰斯特拉算法计算任意两点之间的最短路径。
6.最后用一个主函数main输出各项结果。
四、程序简单说明:
1.创建校园图:
(1)先定义节点个数N,边的最大值(MAXedg),节点(景点名称、景点信息),邻接点,边,顶点向量,当前顶点数和边数。
(2)先给一个节点赋上其相关信息,然后再用p = (Node)malloc(sizeof(edgenode))语句申请下一结点,再给所申请的节点赋上相关信息,直到节点数为N=10为止。
(3)读入道路的起始点,为邻接矩阵的边赋相应的值。
(4)节点和边的相关信息都弄好了后,校园图也就创建好了。
2.利用函数Name给10个节点赋上相应的名称,利用函数Information给各节点添加相应的介绍信息。
3.利用函数travgraph来查找景点信息,要查找景点名称时调用Name函数,要查找景点介绍信息时调用Information函数。
4.手动创建一个校园图creat(Matrix_Graph *G),然后为相应的边赋上真正的值。
5.用path函数来求任意两景点之间的最短路径。
6.用main函数来输出结果:用switch语句分别输出,要创建校园图时调用creatgraph函数;查找景点相关信息时调用travgraph函数;要查找任意两景点之间的最短路径时,先输入你目前所在的位置,再
输入你的目的地,最后调用path函数。
五、运行结果:
1.运行结果界面:
2.由于我编写创建校园图的程序时,不会编写打开一个文本的程序,所以创建校园图的运行结果显示的是“打开文本错误”。
3.查找景点相关信息的结果:
4.查找最短路径的结果:
六、心得与体会:
1.了解数据结构在编写比较复杂的程序的重要作用;
2.对数据结构中定义无向图和创建无向图的理解更加深刻;
3.完全理解了迪杰斯特拉算法的原理,但对于其算法的程序编写还是不太明白;
4.学会了在编写几百行程序时如何查找错误,如何改错误,不过改错误时有时候是叫同学改的;
5.了解了vs中的debug功能;
七、程序代码:
#define N 10
#define MAX 20 //图中顶点数的最大值
#define MAXedg 30 //图中边数的最大值
#include
#include
#include
#include
typedef int AdjMatrix[MAX][MAX];
typedef struct
{
int vexs[MAX];
AdjMatrix arcs;
}Matrix_Graph;//图的矩阵表示法。
typedef struct edgenode
{
int adjvex; //临接点序号
int length; //道路长度
char info[10]; //景点名称
char info2[100]; //景点详细信息
struct edgenode *next;
}edgenode, *Node ;
typedef struct
{
char name[10]; //存储景点的名称.
char information[100]; //具体的介绍此景点
struct edgenode *link; //指向下一个景点
}vexnode; //景点及其信息.
typedef struct Edge
{
int lengh; //边的权值,表示路径长度.
int ivex, jvex; //边的两端顶点号
struct Edge *next; //指向下一条边
} EdgeType;
//边及其信息.
typedef struct
{
int num; //顶点编号。
char name[10]; //顶点名称
} vertex;
typedef struct
{
vertex vexs[MAX]; //顶点集合
int edges[MAX][MAX]; //临街矩阵
}adjmax; //adj
FILE *fp; //文件的读取
void clrscr() //清屏
{
system("cls");
}
void creatgraph(vexnode g[],int *n, EdgeType e[],adjmax *adj) //创建校园图
{
int b,i,s,d,len;
struct edgenode *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);
strcpy(adj->vexs[i].name,g[i].name);
g[i].link = NULL; //初始化
}
for(i = 1; i <= b; i++)
{
fscanf(fp,"%d %d %d\n",&e[i].lengh,&e[i].ivex,&e[i].jvex); //读入道路长度和起始点
s = e[i].ivex; //s是起点,d是终点。
d = e[i].jvex;
len = e[i].lengh;
adj->edges[s][d] = e[i].lengh; //为邻接矩阵中相应的边赋值
adj->edges[d][s] = e[i].lengh;