实验三实验报告文档格式.docx
- 文档编号:3665462
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:18
- 大小:111.82KB
实验三实验报告文档格式.docx
《实验三实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《实验三实验报告文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
stdlib.h"
#defineMax20000//最大值为20000
#defineNUM10//顶点最大数为10
typedefstructArcCell//弧信息
{
intadj;
//权值,顶点距离
}ArcCell;
typedefstructVertexType//顶点类型
intnumber;
char*sight;
//景点名称
char*description;
//景点介绍
}VertexType;
typedefstruct
VertexTypevex[NUM];
//顶点向量
ArcCellarcs[NUM][NUM];
//数组表示,邻接矩阵
intvexnum,arcnum;
//图的当前顶点数和弧数
}MGraph;
MGraphG;
intP[NUM][NUM];
//定义景点指针
longintD[NUM];
//最短距离
intx[10]={0};
voidCreateUDN(intv,inta);
voidnarrate();
voidShortestPath(intnum);
voidoutput(intsight1,intsight2);
charMenu();
voidsearch();
charSearchMenu();
voidHaMiTonian(int);
voidNextValue(int);
voiddisplay();
voidmain()
intv0,v1;
charck;
CreateUDN(NUM,14);
//构造图
do
{
ck=Menu();
switch(ck)
case'
1'
:
system("
cls"
);
narrate();
printf("
\n\n\t\t\t请选择起点景点(0~9):
"
scanf("
%d"
&
v0);
\t\t\t请选择终点景点(0~9):
v1);
ShortestPath(v0);
output(v0,v1);
\n\n\t\t\t\t请按ENTER继续...\n"
getchar();
break;
2'
search();
3'
//narrate();
x[0]=1;
HaMiTonian
(1);
\n\n\t\t\t\t请按任意键继续...\n"
};
}while(ck!
='
e'
}
charMenu()
charc;
intflag;
flag=1;
\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"
\t\t\t┃┃\n"
\t\t\t┃1、查询景点路径┃\n"
\t\t\t┃2、查询景点信息┃\n"
\t\t\t┃3、推荐参观路线┃\n"
\t\t\t┃e、退出┃\n"
\t\t\t┗━━━━━━━━━━━━━━━┛\n"
\t\t\t\t请输入您的选择:
%c"
c);
if(c=='
||c=='
)
flag=0;
}while(flag);
returnc;
charSearchMenu()//查询景点路径
\t\t\t┃1、按照景点编号查询┃\n"
\t\t\t┃2、按照景点名称查询┃\n"
\t\t\t┃e、返回┃\n"
voidsearch()//查询景点信息
intnum;
inti;
charname[20];
c=SearchMenu();
switch(c)
\n\n\t\t请输入您要查找的景点编号:
num);
for(i=0;
i<
NUM;
i++)
if(num==G.vex[i].number)
\n\n\t\t\t您要查找景点信息如下:
\n\n\t\t\t%-25s\n\n"
G.vex[i].description);
\n\t\t\t按ENTER返回..."
if(i==NUM)
\n\n\t\t\t没有找到!
\n\n\t\t\t按ENTER返回..."
}
\n\n\t\t请输入您要查找的景点名称:
%s"
name);
if(!
strcmp(name,G.vex[i].sight))//?
}while(c!
voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G
inti,j;
G.vexnum=v;
//初始化图的顶点数和边数
G.arcnum=a;
G.vexnum;
++i)G.vex[i].number=i;
//初始化每一个顶点的编号
G.vex[0].sight="
大门"
;
G.vex[0].description="
校园出入的正门。
G.vex[1].sight="
大礼堂"
G.vex[1].description="
学校大事举办。
G.vex[2].sight="
图书馆"
G.vex[2].description="
借阅图书。
G.vex[3].sight="
一食堂"
G.vex[3].description="
校区餐饮"
G.vex[4].sight="
四食堂"
G.vex[4].description="
购物中心"
G.vex[5].sight="
31栋"
G.vex[5].description="
天才的聚集地"
G.vex[6].sight="
七教"
G.vex[6].description="
人才的培养地"
G.vex[7].sight="
机房"
G.vex[7].description="
学生日常上网的地方"
G.vex[8].sight="
篮球场"
G.vex[8].description="
学生篮球比赛场地"
G.vex[9].sight="
田径馆"
G.vex[9].description="
篮球、排球、场地"
++i)
for(j=0;
j<
++j)//初始化邻接矩阵
G.arcs[i][j].adj=Max;
G.arcs[0][1].adj=G.arcs[1][0].adj=15;
G.arcs[1][2].adj=G.arcs[2][1].adj=24;
G.arcs[1][3].adj=G.arcs[3][1].adj=22;
G.arcs[1][4].adj=G.arcs[4][1].adj=16;
G.arcs[1][5].adj=G.arcs[5][1].adj=50;
G.arcs[2][7].adj=G.arcs[7][2].adj=800;
G.arcs[3][4].adj=G.arcs[4][3].adj=15;
G.arcs[3][6].adj=G.arcs[6][3].adj=10;
G.arcs[4][6].adj=G.arcs[6][4].adj=10;
G.arcs[5][6].adj=G.arcs[6][5].adj=20;
G.arcs[5][7].adj=G.arcs[7][5].adj=500;
G.arcs[7][8].adj=G.arcs[8][7].adj=50;
G.arcs[7][9].adj=G.arcs[9][7].adj=200;
G.arcs[8][9].adj=G.arcs[9][8].adj=100;
voidnarrate()//界面美化
inti,k=0;
\n\t\t*****************欢迎使用校园导游程序***************\n"
\n\t\t********************九江学院*******************\n"
\n\t\t****************************************"
\n\t\t\t\t景点名称\n"
\t\t****************************************\n"
\t\t\t\t\t(%2d)%-10s\t\t\t\n"
i,G.vex[i].sight);
k=k+1;
\t_________________________________________________________________\n"
voidShortestPath(intnum)//最短路径
intv,w,i,t;
intfinal[NUM];
//辅助数组
intmin;
for(v=0;
v<
v++)
final[v]=0;
D[v]=G.arcs[num][v].adj;
for(w=0;
w<
w++)
P[v][w]=0;
if(D[v]<
20000)
P[v][num]=1;
P[v][v]=1;
D[num]=0;
final[num]=1;
++i)
min=Max;
++w)
final[w])
if(D[w]<
min)
v=w;
min=D[w];
final[v]=1;
++w)
final[w]&
&
((min+G.arcs[v][w].adj)<
D[w]))
D[w]=min+G.arcs[v][w].adj;
for(t=0;
t<
t++)
P[w][t]=P[v][t];
P[w][w]=1;
voidoutput(intsight1,intsight2)//输出界面
inta,b,c,d,q=0;
a=sight2;
if(a!
=sight1)
\n\t从%s到%s的最短路径是"
G.vex[sight1].sight,G.vex[sight2].sight);
\t(最短距离为%dm.)\n\n\t"
D[a]);
\t%s"
G.vex[sight1].sight);
d=sight1;
for(c=0;
c<
++c)
gate:
//?
P[a][sight1]=0;
for(b=0;
b<
b++)
if(G.arcs[d][b].adj<
20000&
P[a][b])
-->
G.vex[b].sight);
q=q+1;
P[a][b]=0;
d=b;
if(q%8==0)printf("
\n"
gotogate;
voidHaMiTonian(intm)//哈密尔顿图遍历,用来求推荐路线
if(m>
9)return;
L:
NextValue(m);
if(x[m]==0)
return;
if(m==7&
G.arcs[0][x[9]-1].adj!
=20000)
display();
else
HaMiTonian(m+1);
gotoL;
voidNextValue(intk)//哈密顿函数中用到此函数
intj;
l:
x[k]=(x[k]+1)%10;
if(x[k]==0)
if(G.arcs[x[k-1]-1][x[k]-1].adj!
k;
j++)
if(x[j]==x[k])
gotol;
voiddisplay()
inti=0;
\n\n\t"
9;
i++)
%s->
G.vex[x[i]-1].sight);
出口"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告