数据结构课程设计校园导航文档格式.docx
《数据结构课程设计校园导航文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计校园导航文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
第三点就是设计各个功能得实现,学校景点得介绍通过函数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;
i<
ga—〉n;
i++)
for(j=0;
j<
ga->
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;
ﻩfor(j=0;
j<ga-〉n;
ﻩ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;
ga—>
n;
{
ﻩscanf(”%d"
&(ga—>vexs[i]、num));
ﻩ gets(ga—〉vexs[i]、name);
ﻩﻩgets(ga—〉vexs[i]、introduce);
ﻩfor(i=0;
i〈ga-〉n;
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;
ga、n;
ﻩ {
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;
{
ﻩ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<
ga、n;
v++)
{
for(w=0;
w<
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++)
ﻩﻩfor(v=0;
v〈ga、n;
v++)
ﻩﻩfor(w=0;
ga、n;
w++)
ﻩﻩif(d[v][u]+d[u][w]<
d[v][w])
ﻩﻩﻩ{
ﻩﻩd[v][w]=d[v][u]+d[u][w];
ﻩﻩfor(i=0;
i<ga、n;
ﻩﻩ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,&
printf("
\n\n");
%s",ga、vexs[k]、name);
ﻩfor(u=0;
u<
ga、n;
u++)
if(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<
k;
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);
ﻩ