数据结构课程设计报告校园导游图1Word下载.docx

上传人:b****6 文档编号:16531797 上传时间:2022-11-24 格式:DOCX 页数:47 大小:721.33KB
下载 相关 举报
数据结构课程设计报告校园导游图1Word下载.docx_第1页
第1页 / 共47页
数据结构课程设计报告校园导游图1Word下载.docx_第2页
第2页 / 共47页
数据结构课程设计报告校园导游图1Word下载.docx_第3页
第3页 / 共47页
数据结构课程设计报告校园导游图1Word下载.docx_第4页
第4页 / 共47页
数据结构课程设计报告校园导游图1Word下载.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告校园导游图1Word下载.docx

《数据结构课程设计报告校园导游图1Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告校园导游图1Word下载.docx(47页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告校园导游图1Word下载.docx

(1)为来访客人查询各景点的相关信息;

(2)为来访客人查询图中任意两个景点间的最短路径

(3)为来访客人查询图中任意两个景点间的所有路径

(7)为来访客人输出对应编号景点的信息

3.数据需求:

建立无向图G,图中顶点ver表示主要景点,存放景点编号position、名称name、简介introduction等信息,图中边arc表示景点间的道路,存放路径长度信息distance。

二概要设计

1.ADTGraph

数据对象V:

V具有相同特性的数组元素的集合,称为顶点集

数据关系R:

R={VR}

VR={<

x,y>

|P(x,y)^(x,y属于V)}

ADTGraph{

数据对象V:

一个集合,该集合中的所有元素具有相同的特性

数据关系R:

基本操作:

(1) 

initgraph(&

G);

(2) 

creatgraph(mgraph&

G) 

(3) 

DeleteplanArc(mgraph&

G);

(4) 

DeleteVertex(mgraph&

(5) 

enarc(mgraph&

(6) 

enverx(mgraph&

}ADTGraph

基本操作:

1、voiddisplaycampus(mgraphg)输出所有顶点信息(即将展示校园全景图)

2、voidseaabout(mgraphG)根据输入编号用来查询各个景点信息

3、voidshortestpath_Floyd(mgragh*g)用弗洛伊德阿算法求两个景点间最短路径

4、voidAllpaths(mgragh*g)显示输入两个顶点间的所有路径

14、intinitgraph(mgraph&

G)校园导游图的初始化

15、voidmain()主函数,可以调用子函数

16、exit(0)退出程序

三详细设计

总体流程图:

1、创建无向网图算法的伪代码描述如下:

intcreatgraph(mgraph&

G)//构造图的邻接矩阵

{

输入矩阵对应的顶点数G.vernum和边数G.arcnum;

for(i=0;

i<

G.vernum;

i++)

{

输入对应的景点编号、景点名称、景点简介:

}

初始化任意景点的路径

修改两顶点间的路径

}

2、输出学校平面图的算法的伪代码描述如下:

voiddisplaycampus(mgraphG)//显示景点信息;

对应输出景点编号,景点名称,景点简介

3、按编号查询景点的相关信息的算法的伪代码描述如下:

voidseaabout(mgraphG)//景点信息查询;

请输入要查询的景点编号n;

if(n<

0||n>

11)

该景点不存在,请重新输入:

else

根据编号输出对应的景点信息;

4、更改图的信息的算法的伪代码描述如下:

intchangegraph(mgraphG)

重新建图输入1删除结点输入2删除边输入3增加结点输入4

增加边输入5更新图信息输入6打印邻接矩阵输入7返回程序输入8

5、求无向图的最短路径的算法的伪代码描述如下:

voidshortestpath_Floyd(mgraph*G)

{

定义数组三维p[10][10][10],用于寻找任意两景点间最短路径中的景点,

定义二维数组D[10][10]用于存放两顶点间的最短路径;

初始化任意两景点间的最短路径和最短路径上的景点

{

D[v][w]=G->

arcs[v][w].adj;

//把v,w路径的值放到D[v][w]中

v,w是,v,w路径上的景点,所以p[v][w][v]=1;

p[v][w][w]=1;

}

如果u到v,w之间的两条路径之和小于v,w之间的路径,则使D[v][w]=D[v][u]+D[u][w]

若i是v,u上的最短路径的景点,或是u,w之间最短路径的景点,则i是v,w之间最短路径上的景点

intflag=1;

while(flag)

输入出发点和目的地的编号:

k,j

if(k<

0||k>

G->

vernum||j<

0||j>

vernum)

景点编号不存在!

请重新输入出发点和目的地的编号:

if(k>

=0&

&

k<

顶点数目&

j>

j<

顶点数目)

flag=0;

逐个输出最短路径上的景点名字以及总路线长

6、求无向图的所有路径的算法的伪代码描述如下:

voidAllpath(mgraph*G)

intv,w,k,j,flag=1,

定义数组三维p[10][10][10],用于寻找任意两景点间路径中的景点,

定义二维数组D[10][10]用于存放两顶点间的路径长度;

输入出发点和目的地的编号k,j;

if(k<

顶点数目||j<

0||j顶点数目)

重新输入出发点和目的地的编号:

k,j;

}

D[v][w]=G->

//初始化数组D[v][w]

if(D[v][w]!

=A)如果这两个顶点间存在路径,则使p[v][w]为1,否则为0;

p[v][w]=1;

p[w][v]=1;

}

if(p[k][j]==1)

如果这两个景点间有路径,则输出路径中的所有景点和长度

7、增添路径的信息的算法的伪代码描述如下:

intenarc(mgraph&

G)//增加路径

输入增加边的起始点v0,终点v1,及边的长度distance

G.arcs[v0][v1].adj=G.arcs[v0][v1].adj=distance;

设置增加的路径长度;

8、增添景点的信息的算法的伪代码描述如下:

intenverx(mgraph&

G)//增加结点

输入要添加的景点的信息:

包括编号,名称,简介

G.vernum++;

增加一条边

G.arcs[i][G.vernum-1].adj=G.arcs[i][G.vernum-1].adj=A;

//修改矩阵信息

return1;

9、删除路径的信息的算法的伪代码描述如下:

intDeleteplanArc(mgraph&

G)//删除图一条边;

输入要删除的一条边对应的两个顶点v0,v1

调用locatevex函数找到这两个点的位置

更改边的信息

边数减少1;

10、删除景点的信息的算法的伪代码描述如下:

intDeleteVertex(mgraph&

G)//删除景点

输入要删除的景点编号v

调用locatevex函数找到这个点的位置

if(m<

0)

重新输入

if(m>

for(i=m;

景点数G.vernum;

{

更改景点的名称strcpy(G.vexs[i].name,G.vexs[i+1].name);

更改顶点的简介strcpy(G.vexs[i].introduction,G.vexs[i+1].introduction);

}

删除该景点所在矩阵的行

删除该景点所在矩阵的

G.vernum--;

边数减少1

11、初始化导游图算法伪代码描述如下:

intinitgraph(mgraph&

G)//校园导游图的初始化

设置景点数G.vernum=10;

设置路径数G.arcnum=15;

//初始化景点平面图

设置景点编号值,名称,简介

初始化边矩阵

12、打印无向图邻接矩阵算法的伪代码描述如下:

voidprintmatrix(mgraphG)//打印图的邻接矩阵;

根据路径的初始化信息

输出一个n行n列的矩阵(n是景点的个数),矩阵中的元素是路径的长度,

如果两景点间无长度,则输出0;

13、景点定位的算法的伪代码描述如下:

intlocatevex(mgraphc,intv)//景点的定位

传入要查找的顶点位置v

如果找到改点,返回改点

14、更新校园导游图景点信息算法的伪代码描述如下:

intnewgraph(mgraph&

G)//更新景点的信息

输入更改的景点数n;

for(inti=0;

n;

i++)//修改景点信息

逐个输入景点的编号、景点的名称:

、景点的简介

输入更改的路径数n;

intdistance,v0,v1;

输入更新的路径的信息

i++)//修改路径信息

逐条输入起始景点编号v0、终点景点编号v1、路劲长度distance

四设计与调试分析

1.校园导游图景点介绍(输出各景点信息):

应输出所有景点的信息,如下:

景点编号(position)

景点名称(name)

景点介绍(intoduction)

淮工主楼

淮海工学院标志建筑,楼高10层

1

计算机楼

计算机学院学生学习基地,楼高6层

2

行政楼

校领导日常工作之处,楼高5层"

3

图书馆

楼高5层,藏书逾十万

4

文通楼

文通楼,楼高6层,学生学习自习地点

5

文渊楼

文渊楼,楼高5层,教师办公室

6

大活中心

内设大量娱乐设施,学生周末娱乐场所

7

淮工西门

淮工西门是车站,学生在这里坐公交到达火车的站

8

实验楼

做实验的地点,楼高6层,内有大量先进实验仪器

9

体育馆

学生体育锻炼地点

实际输出的信息为:

操作成功,与预期结果一致。

2.打印校园导游图的邻接矩阵:

3、查询景点间最短路径:

比如:

20

15

查询景点1(计算机楼)和3(图书馆)之间的最短路径,预期结果应为:

计算机楼—>

文通楼—>

图书馆,

路径总长度为35

4、景点信息查询:

查询景点为1的景点信息,预期结果应为:

景点序号(position)

与预期结果一致。

查询成功。

5、更改图的信息:

更改图信息主页面:

5.1重新建图

比如重新建一个有3个景点和3条路径的无向图:

景点信息分别为:

信息中心

第一食堂

饮食中心

B#宿舍

男生宿舍

矩阵关系为:

25

50

与预期结果一致,重新建图成功。

5.2删除景点:

比如删除景点编号为1的景点:

则输出的矩阵中应失去原第一行第一列,

并且其信息不再出现在校园导游中:

删除景点前的图信息:

删除景点前的矩阵:

删除景点后的图的信息和矩阵:

与预期结果一致,删除景点成功。

5.3删除两景点间的路径:

比如删除编号为0和2的两景点间的路径,则打印出来的矩阵在第0行第2列和第2行第0列的值应为0。

删除路径前的矩阵:

删除路径后的矩阵:

与预期结果一致,删除路径成功。

5.4增加景点信息

比如增加一个景点,其信息为:

10

A#7宿舍楼

计算机学院女生宿舍

对应的矩阵中应增加一行一列,第10行和第10列上所有元素都应为0,输出的图信息中最后应增加上述的信息。

增加景点前的图信息:

增加景点前的矩阵:

增加景点后的图信息和矩阵:

与预期结果一致,增加景点成功。

5.5增加一条路径

比如在景点0和4之间加一条长度为10的路径,则在第0行第4列与第4行第0列元素应为10。

增加路径前的矩阵:

增加路径后的矩阵:

与预期结果一致,增加路径成功。

5.6更新图信息

比如要更新一个景点和一条路径的信息,将景点信息:

改为:

B#8

更改顶点编号为0和3路径长度,路径由30改为15。

更改后的图中编号为1的信息应变为:

矩阵中第0行第3列和第3行第0列元素应由30变为15.

更改景点前的图信息:

更改路径前的矩阵:

更新后的图信息和矩阵:

6、查找两顶点间的所有路径

比如查找1,3两点间的所有路径,所有路径为:

五用户手册

1、进入本系统后,随即显示系统主菜单页面。

用户可在此菜单下输入各子菜单对应的数字,并按回车键,执行相应的子菜单命令。

2、查询、修改、增加、删除景点以及景点间的路径,都是通过输入景点的编号来实现的,进入主菜单时,用户最好先选择“1、学校景点介绍”和“2、打印邻接矩阵”,方便用户了解景点信息以及路径信息。

六测试成果

操作主界面

查看淮工景点平面图

打印无向图邻接矩阵

查询两顶点间的最短路径

按编号查询景点信息

查询两顶点间的所有路径:

更改图信息:

退出系统

七附录(源程序清单)

#include<

iostream>

#include<

malloc.h>

string>

iomanip>

usingnamespacestd;

#definemax_ver_num20

#defineOK1

#defineFALSE0

#defineError-1

#defineA1000

#defineTRUE1

typedefstructarcnode//设置边的权值信息

intadj;

//路径权值

}arcnode,adjarcs[max_ver_num][max_ver_num];

typedefstructverdata//设置景点信息

intposition;

charname[60];

charintroduction[1000];

}verdata;

typedefstructmgraph

verdatavexs[max_ver_num];

adjarcsarcs;

intvernum,arcnum;

}mgraph;

//全局变量

intvisited[20];

intd[35];

mgraphg;

inti,j;

G.vernum=10;

G.arcnum=20;

G.vexs[i].position=i;

strcpy(G.vexs[0].name,"

淮工主楼"

);

strcpy(G.vexs[1].name,"

计算机楼"

strcpy(G.vexs[2].name,"

行政楼"

strcpy(G.vexs[3].name,"

图书馆"

strcpy(G.vexs[4].name,"

文通楼"

strcpy(G.vexs[5].name,"

文渊楼"

strcpy(G.vexs[6].name,"

大活中心"

strcpy(G.vexs[7].name,"

淮工西门"

strcpy(G.vexs[8].name,"

实验楼"

strcpy(G.vexs[9].name,"

体育馆"

strcpy(G.vexs[0].introduction,"

淮海工学院标志建筑,楼高10层"

strcpy(G.vexs[1].introduction,"

计算机学院学生学习基地,楼高6层"

strcpy(G.vexs[2].introduction,"

strcpy(G.vexs[3].introduction,"

楼高5层,藏书逾十万"

strcpy(G.vexs[4].introduction,"

文通楼,楼高6层,学生学习自习地点"

strcpy(G.vexs[5].introduction,"

文渊楼,楼高5层,教师办公室"

strcpy(G.vexs[6].introduction,"

内设大量娱乐设施,学生周末娱乐场所"

strcpy(G.vexs[7].introduction,"

淮工西门是车站,学生在这里坐公交到达火车的站"

strcpy(G.vexs[8].introduction,"

做实验的地点,楼高6层,内有大量先进实验仪器"

strcpy(G.vexs[9].introduction,"

学生体育锻炼地点"

//初始化边矩阵

for(j=0;

j++)

G.arcs[i][j].adj=A;

G.arcs[0][1].adj=15;

G.arcs[0][2].adj=25;

G.arcs[0][3].adj=30;

G.arcs[1][4].adj=15;

G.arcs[1][7].adj=20;

G.arcs[1][9].adj=40;

G.arcs[2][5].adj=10;

G.arcs[2][8].adj=15;

G.arcs[3][6].adj=30;

G.arcs[3][8].adj=20;

G.arcs[4][7].adj=10;

G.arcs[4][9].adj=60;

G.arcs[5][8].adj=25;

G.arcs[6][8].adj=50;

G.arcs[7][9].adj=35;

G.arcs[4][5].adj=20;

G.arcs[5][6].adj=25;

G.arcs[5][7].adj=30;

G.arcs[6][7].adj=15;

G.arcs[6][9].adj=20;

G.arcs[7][8].adj=40;

G.arcs[8][9].adj=10;

G.arcs[2][9].adj=15;

G.arcs[3][9].adj=30;

G.arcs[3][4].adj=20;

G.arcs[4][8].adj=10;

G.arcs[4][5].adj=60;

G.arcs[5][9].adj=25;

G.arcs[1][8].adj=50;

G.arcs[1][7].adj=35;

for(j=0;

for(i=0;

G.arcs[i][j].adj=G.arcs[j][i].adj;

inti;

c.vernum;

if(v==c.vexs[i].position)

returni;

return-1;

cout<

<

"

对应的矩阵为:

endl;

if(G.arcs[i][j].adj<

A)

cout<

setiosflags(ios:

:

left)<

setw(5)<

G.arcs[i][j].ad

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1