数据结构课程设计报告(校园导游图 )

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

相关文档
最新文档