实验五图的基本操作Word文档下载推荐.docx
《实验五图的基本操作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验五图的基本操作Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
![实验五图的基本操作Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/9/db57b4dd-f85b-49de-8720-b9f2f4132542/db57b4dd-f85b-49de-8720-b9f2f41325421.gif)
三、实验前的准备工作
1、掌握图的相关概念。
2、掌握图的逻辑结构和存储结构。
3、掌握图的两种遍历算法的实现。
四、实验报告要求
1、实验报告要按照实验报告格式规范书写。
2、实验上要写出多批测试数据的运行结果。
3、结合运行结果,对程序进行分析。
5、实验步骤
(1)、数据结构与核心算法的设计描述
//邻接表创建图
intCreateGraph(Graph&
G){
ArcNode*s;
cout<
<
"
输入顶点和弧个数:
;
cin>
>
G.vernum>
G.arcnum;
输入各顶点信息:
\n"
for(inti=0;
i<
G.vernum;
i++){
G.ver[i].data;
G.ver[i].first=NULL;
}
输入弧相关信息:
for(intj=0;
j<
j++){
for(intk=0;
k<
k++){
intflag;
cout<
G.ver[j].data<
与"
G.ver[k].data<
是否存在弧?
(1-存在/0-不存在)"
cin>
flag;
if(flag==1){
s=newArcNode;
s->
adjver=k;
next=G.ver[j].first;
G.ver[j].first=s;
adjver=j;
next=G.ver[k].first;
G.ver[k].first=s;
}
}
return0;
}
//深度优先搜索遍历
voidDFS(Graph&
G,inti){
visited[i]=true;
ArcNode*p;
p=G.ver[i].first;
while(p){
if(!
visited[p->
adjver])
DFS(G,p->
adjver);
p=p->
next;
voidLengthTraval(Graph&
inti;
for(i=0;
i++)
visited[i]=false;
visited[i])
DFS(G,i);
//广度优先搜索遍历
voidBFS(Graph&
G,intk){
QueueQ;
InitQueue(Q);
G.ver[k].data;
visited[k]=true;
EnQueue(Q,k);
while(Q.rear!
=Q.front){
i=DelQueue(Q);
p=G.ver[k].first;
while(p){
if(!
adjver]){
cout<
G.ver[p->
adjver].data;
visited[p->
adjver]=true;
EnQueue(Q,p->
p=p->
voidBroadTraval(Graph&
BFS(G,i);
㈡、函数调用及主函数设计
intmain(){
GraphG;
menu();
intflag=1;
while(flag){
intn;
输入操作编号:
cin>
n;
switch(n){
case1:
CreateGraph(G);
break;
case2:
LengthTraval(G);
case3:
BroadTraval(G);
intk;
是否继续?
(1-继续/0-退出)"
k;
flag=k;
}
㈢程序调试及运行结果分析(应包含多组测试数据)
6、实验总结
这次实验,我真的懂得了好多东西。
我感觉自己有好多东西要学,自己现在的知识还很浅。
所以,我会好好努力的,继续加油。
程序清单:
#include<
iostream>
usingnamespacestd;
#defineVERTEX_NUM10
typedefcharVerType;
voidmenu();
boolvisited[VERTEX_NUM];
typedefstructArcNode{
intadjver;
//弧指向顶点的位置
structArcNode*next;
//指向下一条弧的指针
intinfo;
//弧的相关信息指针
}ArcNode;
typedefstructVerNode{
VerTypedata;
//顶点元素
structArcNode*first;
//指向第一条依附该顶点的弧
}VerNode,AdjList[VERTEX_NUM];
typedefstruct{
intvernum,arcnum;
//顶点、弧数量
AdjListver;
//顶点集合
intkind;
//图的种类
}Graph;
voidmenu(){
|-------------------------------------------------|\n"
|---****图的基本操作****---|\n"
|---****1-创建图****---|\n"
|---****2-深度优先遍历****---|\n"
|---****3-广度优先遍历****---|\n"
j;
intfront;
intrear;
intdata[VERTEX_NUM];
}Queue;
//初始化
intInitQueue(Queue&
Q){
Q.rear=Q.front=0;
return0;
intEnQueue(Queue&
Q,inte){
if((Q.rear-Q.front)<
=VERTEX_NUM){
Q.data[Q.rear]=e;
Q.rear=(Q.rear+1)%VERTEX_NUM;
intDelQueue(Queue&
intt;
if(Q.rear==Q.front)return0;
else{
t=Q.data[Q.front];
Q.front=(Q.front+1)%VERTEX_NUM;
returnt;
{
深度优先遍历结果:
LengthTraval(G);
}break;
广度优先遍历结果:
BroadTraval(G);
流程图