数据结构课程设计校园导航.docx
《数据结构课程设计校园导航.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计校园导航.docx(30页珍藏版)》请在冰豆网上搜索。
数据结构课程设计校园导航
一、课程设计目得
本课程设计得目标就就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序得能力,并培养基本得、良好得程序设计技能以及合作能力。
设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密得、规模较大得问题,通过分析、设计、编码、调试等各环节得训练,使学生深刻理解、牢固掌握数据结构与算法设计技术,掌握分析、解决实际问题得能力。
通过这次设计,要求在数据结构得逻辑特性与物理表示、数据结构得选择与应用、算法得设计及其实现等方面,加深对课程基本内容得理解。
同时,在程序设计方法以及上机操作等基本技能与科学作风方面受到比较系统与严格得训练。
2、课程设计内容
1)问题描述
用无向网表示您所在学校得校园景点平面图,图中顶点表示主要景点,存放景点得编号、名称、简介等信息,图中得边表示景点间得道路,存放路径长度等信息.要求能够回答有关景点介绍、游览路径等问题。
2)基本要求
(1)查询各景点得相关信息;
(2)查询图中任意两个景点间得最短路径。
(3)查询图中任意两个景点间得所有路径.
(4)增加、删除、更新有关景点与道路得信息
三、课程设计过程
1.需求分析
(1)设计学校得校园平面图,选取出若干得具有代表性得景点构成一个抽象得无向带权图,顶点为景点,边得权值代表了景点间路径得长度。
(2)将景点得序号,名称,介绍存放起来准备查询。
(3)提供任意景点得信息;
(4)提供任意经典得路径查询及其最优路线得查询
(5)平面图景点得增加及删除,以及边与权值(长度)得改变
2.概要设计
1:
第一点就是主界面得设计,首先,为了该系统各个功能得管理,设计出含有多个菜单项得主菜单界面,可以更方便得使用该系统。
2:
第二点就是存储结构得设计,采取了图结构类型(mgraph)存储校园图得信息,景点信息用结构数组vexs存储,而且利用全局变量:
visited[]数组用于存储顶点就是否被访问标志;d[]数组用于存放权值与查找路径顶点得编号;campus就是一个图结构得全局变量。
3:
第三点就是设计各个功能得实现,学校景点得介绍通过函数browsepus()来实现;查询景点间得最段路径通过Floyd(弗洛伊德)算法实现;查询景点间得所有路径通过allpath函数与path函数来实现;更改图得信息可以由主函数changegraph以及其她函数可以实现。
3.详细设计
(1)主要得操作界面得显示以及无向网操作
void initgraph(graph *ga)
{
int i,j;
ﻩga—>n=9;
ga—>e=11;
for(i=0;i〈ga—>n;i++)
{
ga->vexs[i]、num=i;
}
strcpy(ga-〉vexs[0]、name,”西门”);
ﻩﻩstrcpy(ga->vexs[0]、introduce,"学校得正大门,设有公交站”);
ﻩﻩstrcpy(ga-〉vexs[1]、name,"风雨篮球场");
ﻩﻩstrcpy(ga-〉vexs[1]、introduce,”");
strcpy(ga->vexs[2]、name,”田径场");
ﻩﻩstrcpy(ga->vexs[2]、introduce,”举办运动会,平时体育跑步锻炼等”);
ﻩstrcpy(ga—〉vexs[3]、name,"京元食堂”);
ﻩﻩstrcpy(ga->vexs[3]、introduce,"新食堂");
strcpy(ga—>vexs[4]、name,”苍霞湖畔”);
ﻩstrcpy(ga—〉vexs[4]、introduce,”戏称“分手湖”,景色宜人”);
strcpy(ga—〉vexs[5]、name,"思源楼");
ﻩstrcpy(ga->vexs[5]、introduce,”学校王牌土木得教学区");
ﻩstrcpy(ga-〉vexs[6]、name,”图书馆");
ﻩﻩstrcpy(ga->vexs[6]、introduce,"就是大学城最高得标志性建筑");
ﻩstrcpy(ga—〉vexs[7]、name,"北教区");
ﻩstrcpy(ga—〉vexs[7]、introduce,"北校区集中得教学楼");
ﻩstrcpy(ga-〉vexs[8]、name,”禾堂餐厅");
ﻩstrcpy(ga->vexs[8]、introduce,"旧食堂”);
for(i=0;ifor(j=0;jn;j++)
ga->edges[i][j]=1000;
ﻩﻩga—〉edges[0][1]=1;
ﻩga->edges[1][2]=2;
ﻩga->edges[1][3]=5;
ga—〉edges[2][4]=4;
ﻩga—〉edges[3][4]=9;
ﻩﻩga-〉edges[4][5]=1;
ﻩga—〉edges[4][8]=1;
ﻩﻩga->edges[5][6]=5;
ga->edges[5][7]=7;
ﻩﻩga->edges[7][8]=1;
ﻩga—>edges[6][7]=9;
for(i=0;i<ga-〉n;i++)
ﻩfor(j=0;j<ga-〉n;j++)
ﻩga—〉edges[j][i]=ga-〉edges[i][j];
}
(2)确定顶点就是否存在已经顶点就是否已经被访问过来确定路径
void Create_graph(graph*ga)
{
ﻩinti,j,k,w;
ﻩprintf("请输入顶点数与边数:
\n");
ﻩscanf(”%d%d",&(ga-〉n),&(ga-〉e));
ﻩprintf(”请输入景点编号,景点名字,景点介绍,建立信息表:
\n");
ﻩfor(i=0;in;i++)
{
ﻩscanf(”%d",&(ga—>vexs[i]、num));
ﻩ gets(ga—〉vexs[i]、name);
ﻩﻩgets(ga—〉vexs[i]、introduce);
}
ﻩfor(i=0;i〈ga-〉n;i++)
for(j=0;j<=ga-〉n;j++)
ﻩga—〉edges[i][j]=1000;
for(k=0;k〈ga—〉e;k++)
ﻩ{
ﻩprintf("请输入%d条边得景点序号i,j与长度:
",k+1);
ﻩﻩscanf(”%d %d%d”,&i,&j,&w);
ga->edges[i][j]=w;
ﻩga->edges[j][i]=w;
ﻩ}
}
voidprint(graphga)
{
inti,j;
for(i=0;i〈ga、n;i++)
ﻩ for(j=0;jﻩ {
printf("%d",ga、edges[i][j]);
if(j+1==ga、n)
ﻩ printf("\n");
ﻩ }
}
voidvisit(graphga)
{
ﻩint a;
printf("请输入景点编号:
”);
scanf("%d”,&a);
int i;
ﻩfor(i=0;i<ga、n;i++)
{
ﻩif(a==ga、vexs[i]、num)
ﻩ{
printf("景点编号为%d\n",ga、vexs[i]、num);
printf("景点名称为”);
ﻩputs(ga、vexs[i]、name);
printf("景点介绍为");
ﻩ puts(ga、vexs[i]、introduce);
ﻩbreak;
ﻩ}
}
if(i==ga、n)printf(”无此点\n”);
}
(3)得出景点间得最短路径
voidshortestpath_djst(graphga){
}
void shortestpath_floyd(graphga)
{
inti,j,k,v,u,w,d[35][35],p[35][35][35];
ﻩfor(v=0;v{
for(w=0;wﻩ{
d[v][w]=ga、edges[v][w];
ﻩfor(u=0;u〈ga、n;u++)
ﻩﻩ{
ﻩp[v][w][u]=0;
ﻩﻩ}
ﻩﻩif(d[v][w]<1000)
ﻩ{
ﻩp[v][w][v]=1;
ﻩp[v][w][w]=1;
ﻩ}
ﻩ}
}
for(u=0;u〈ga、n;u++)
ﻩ{
ﻩﻩfor(v=0;v〈ga、n;v++)
ﻩﻩfor(w=0;wﻩﻩif(d[v][u]+d[u][w]ﻩﻩﻩ{
ﻩﻩd[v][w]=d[v][u]+d[u][w];
ﻩﻩfor(i=0;i<ga、n;i++)
ﻩﻩp[v][w][i]=p[v][u][i]||p[u][w][i];
ﻩﻩﻩ}
}
ﻩprintf("\n请输入出发点与目得地编号:
”);
scanf("%d%d",&k,&j);
printf("\n\n");
ﻩwhile(k<0||k〉ga、n||j<0||j>ga、n)
ﻩ{
printf("\n输入得编号不存在");
printf("\n请重新输入编号:
\n\n");
scanf("%d%d”,&k,&j);
printf("\n\n");
}
printf("%s",ga、vexs[k]、name);
ﻩfor(u=0;uif(p[k][j][u]&&k!
=u&&j!
=u)
ﻩprintf(”——->%s”,ga、vexs[u]、name);
printf(”--->%s",ga、vexs[j]、name);
ﻩprintf("\n\n\n总长度为%d千米\n\n\n",d[k][j]);
}
(4)得到景点之间得所有路径
voidpath(graphc,intm,int n,intk){
ﻩ ints,x=0;
ﻩ int t;
t=k+1;
ﻩif(d[k]==n&&k<8)
{
ﻩﻩfor(s=0;sﻩﻩ {
ﻩ printf(”%s-—-〉",c、vexs[d[s]]、name);
}
ﻩ printf("%s\n\n”,c、vexs[d[s]]、name);
ﻩ }
else
ﻩ {
ﻩﻩs=0;
while(s〈c、n)
ﻩ{
ﻩﻩif((c、edges[d[k]][s]〈1000)&&(visited[s]==0))
ﻩﻩ {
ﻩﻩﻩ visited[s]=1;
ﻩﻩﻩ d[k+1]=s;
ﻩﻩpath(c,m,n,t);
ﻩﻩﻩvisited[s]=0;
ﻩﻩ}
ﻩﻩ s++;
ﻩ}
}
}
voidallpath(graphc)
{
intk,i,j,m,n;
ﻩ printf("\n\n请输入您要查询得两个景点得编号:
\n\n");
scanf("%d%d”,&i,&j);
ﻩprintf("\n\n");
ﻩ m=locatevex(c,i);
ﻩ