C++校园导游系统课程设计Word格式.docx
- 文档编号:17607618
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:16
- 大小:109.70KB
C++校园导游系统课程设计Word格式.docx
《C++校园导游系统课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《C++校园导游系统课程设计Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
1.地点介绍2.最短路径3.结束“请选择功能”
3.地点介绍:
出现景点选择:
A.操场B.偏门C.图书馆D.大门E.食堂F.诚智楼G.博学楼H.创新楼I.海天楼J.明德楼请选择地点(选择加回车即能查询景点信息)
4.最短路径:
出现“输入起点位置”,输入后即出现“输入终点位置”(输入加回车即显示两景点的最短路径)
5.测试结果
1.运行界面
2.地点介绍
3.最短路径
6.附录
1.校园景观图实现函数:
voidviewshow()
{
cout<
<
"
东方学院实景图"
endl;
A操场-----B偏门"
/\\"
C图书馆------D大门E食堂----------\\"
/\\\\"
/\\F诚智楼---G博学楼-H创新楼"
/\\/"
I海天楼--------J明德楼"
}
2.建立图函数:
#include"
SeqList.h"
SeqQueue.h"
constintMaxVertices=10;
constintMaxWeight=10000;
classAdjMWGraph
private:
SeqListVertices;
//顶点信息的线性表
intEdge[MaxVertices][MaxVertices];
intnumOfEdges;
public:
AdjMWGraph(constintsz=MaxVertices);
intGraphEmpty()const
{returnVertices.ListEmpty();
intNumOfVertices(void)
{returnVertices.ListSize();
intNumOfEdges(void)
{returnnumOfEdges;
VerTGetValue(constinti);
intGetWeight(constintv1,constintv2);
voidInsertVertex(constVerT&
vertex);
voidInsertEdge(constintv1,constintv2,intweight);
voidDeleteVertex(constinti);
voidDeleteEdge(constintv1,constintv2);
intGetFirstNeighbor(constintv);
intGetNextNeighbor(constintv1,constintv2);
voidDepthFirstSearch(constintv,intvisited[],voidvisit(VerTitem));
voidBroadFirstSearch(constintv,intvisited[],voidvisit(VerTitem));
voidDepthFirstSearch(voidvisit(VerTitem));
voidBroadFirstSearch(voidvisit(VerTitem));
};
AdjMWGraph:
:
AdjMWGraph(constintsz)
for(inti=0;
i<
sz;
i++)
for(intj=0;
j<
j++)
{
if(i==j)Edge[i][j]=0;
elseEdge[i][j]=MaxWeight;
}
numOfEdges=0;
VerTAdjMWGraph:
GetValue(constinti)
if(i<
0||i>
Vertices.ListSize())
{
cerr<
参数i越界出错!
exit
(1);
}
returnVertices.GetData(i);
intAdjMWGraph:
GetWeight(constintv1,constintv2)
if(v1<
0||v1>
Vertices.ListSize()||v2<
0||v2>
参数v1或v2越界出错!
returnEdge[v1][v2];
voidAdjMWGraph:
InsertVertex(constVerT&
vertex)
Vertices.Insert(vertex,Vertices.ListSize());
InsertEdge(constintv1,constintv2,intweight)
Vertices.ListSize())
Edge[v1][v2]=weight;
numOfEdges++;
DeleteVertex(constintv)
i<
Vertices.ListSize();
i++)
j<
j++)
if((i==v||j==v)&
&
Edge[i][j]>
0&
Edge[i][j]<
MaxWeight)
{
Edge[i][j]=MaxWeight;
numOfEdges--;
}
Vertices.Delete(v);
DeleteEdge(constintv1,constintv2)
Vertices.ListSize()||v1==v2)
参数v1或v2出错!
Edge[v1][v2]=MaxWeight;
numOfEdges--;
GetFirstNeighbor(constintv)
if(v<
0||v>
Vertices.ListSize())
参数v1越界出错!
for(intcol=0;
col<
=Vertices.ListSize();
col++)
if(Edge[v][col]>
0&
Edge[v][col]<
MaxWeight)returncol;
return-1;
GetNextNeighbor(constintv1,constintv2)
for(intcol=v2+1;
col<
col++)
if(Edge[v1][col]>
Edge[v1][col]<
MaxWeight)returncol;
DepthFirstSearch(constintv,intvisited[],voidvisit(VerTitem))
visit(GetValue(v));
visited[v]=1;
intw=GetFirstNeighbor(v);
while(w!
=-1)
if(!
visited[w])DepthFirstSearch(w,visited,visit);
w=GetNextNeighbor(v,w);
}
BroadFirstSearch(constintv,intvisited[],voidvisit(VerTitem))
VerTu,w;
SeqQueuequeue;
//定义队列queue
queue.QInsert(v);
while(!
queue.QueueEmpty())
u=queue.QDelete();
w=GetFirstNeighbor(u);
while(w!
if(!
visited[w])
visit(GetValue(w));
visited[w]=1;
queue.QInsert(w);
w=GetNextNeighbor(u,w);
DepthFirstSearch(voidvisit(VerTitem))
int*visited=newint[NumOfVertices()];
NumOfVertices();
i++)visited[i]=0;
for(i=0;
visited[i])DepthFirstSearch(i,visited,visit);
delete[]visited;
}
//非连通图的广度优先搜索遍历算法如下
BroadFirstSearch(voidvisit(VerTitem))
visited[i])BroadFirstSearch(i,visited,visit);
structRowColWeight
introw;
intcol;
intweight;
voidCreatGraph(AdjMWGraph&
G,DatatypeV[],intn,RowColWeightE[],inte)//建图
n;
i++)G.InsertVertex(V[i]);
for(intk=0;
k<
e;
k++)G.InsertEdge(E[k].row,E[k].col,E[k].weight);
voidPrintchar(charitem)
cout<
item<
"
;
voidDijkstra(AdjMWGraph&
G,intv0,intdistance[],intpath[])
intn=G.NumOfVertices();
int*s=newint[n];
intminDis,i,j,u;
distance[i]=G.GetWeight(v0,i);
s[i]=0;
if(i!
=v0&
distance[i]<
MaxWeight)path[i]=v0;
elsepath[i]=-1;
s[v0]=1;
for(i=1;
minDis=MaxWeight;
for(j=0;
=n;
if(s[j]==0&
distance[j]<
minDis)
u=j;
minDis=distance[j];
if(minDis==MaxWeight)return;
s[u]=1;
for(j=0;
if(s[j]==0&
G.GetWeight(u,j)<
MaxWeight&
distance[u]+G.GetWeight(u,j)<
distance[j])
{
distance[j]=distance[u]+G.GetWeight(u,j);
path[j]=u;
}
3.主函数:
typedefcharVerT;
typedefcharDatatype;
AdjMWGraph.h"
View.h"
intmain()
{
ints,sss=1,j=1;
charch,qd,zd;
AdjMWGraphg;
chara[]={'
A'
'
B'
C'
D'
E'
F'
G'
H'
I'
J'
RowColWeightrcw[]={{0,1,20},{0,3,30},{0,4,30},{1,0,20},{2,3,20},{3,0,30},{3,2,20},{3,8,30},{3,9,20},{4,0,30},{4,6,20},{5,6,15},{5,9,15},{6,4,20},{6,5,15},{6,7,10},{7,6,10},{8,3,30},{8,9,15},{9,5,15},{9,8,15}};
intn=10,e=24;
CreatGraph(g,a,n,rcw,e);
intm=g.NumOfVertices();
int*distance=newint[m];
int*path=newint[m];
intv0=0,v1;
Dijkstra(g,v0,distance,path);
end:
if(j==0){system("
cls"
);
do{
viewshow();
cout<
1.地点介绍2.最短路径3.结束"
endl<
请选择功能:
cin>
>
s;
system("
if(s==1)
do{
viewshow();
cout<
A.操场B.偏门C.图书馆D.大门E.食堂"
endl
<
F.诚智楼G.博学楼H.创新楼I.海天楼J.明德楼"
请选择地点:
cin>
ch;
switch(ch)
case'
zhengdamenshow();
cin.get();
system("
break;
mdshow();
czshow();
bxshow();
cxshow();
bahaoshow();
sitangshow();
shihaoshow();
caochangshow();
tushuguanshow();
case'
K'
j=0;
gotoend;
default:
cout<
选择有误,请重新选择!
}while
(1);
if(s==2)
do{
QIDIAN:
请输入起点位置:
qd;
if(qd=='
)v0=0;
elseif(qd=='
)v0=1;
)v0=2;
elseif(qd=='
)v0=3;
)v0=4;
)v0=5;
)v0=6;
)v0=7;
)v0=8;
)v0=9;
else{cout<
起点输入有误,请重新输入!
cin.get();
system("
gotoQIDIAN;
请输入终点位置:
zd;
if(zd=='
)v1=0;
elseif(zd=='
)v1=1;
七、填空题经常会填elseif(zd=='
)v1=2;
四、课文elseif(zd=='
)v1=3;
(北京)是我国的(首都)。
(五星红旗)是我国的(国旗)。
)v1=4;
elseif(zd=='
)v1=5;
)v1=6;
开心开开心心上下上上下下elseif(zd=='
)v1=7;
)v1=8;
立刀旁:
到、刚elseif(zd=='
)v1=9;
终点输入有误,请重新输入!
美丽的风景精彩的球赛高远的蓝天雪白的肚皮cout<
起点"
g.GetValue(v0)<
到终点"
g.GetValue(v1)<
的最短距离为:
distance[v1]<
是否继续查询:
1.是2.否;
请选择:
abcdefghijklmnopqcin>
sss;
淘气的娃娃美丽的夏夜可口的松果闷热的天气}while(sss==1);
if(s==3){cout<
谢谢使用!
return0;
}while
(1);
百花齐放百鸟争鸣春风拂面春暖花开五颜六色百花盛开}
7.参考文献
两点水:
冷、净、凉数据结构——使用C++语言(第二版)朱战立编著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 校园 导游 系统 课程设计