实验五图的基本操作.docx

上传人:b****6 文档编号:7014739 上传时间:2023-01-16 格式:DOCX 页数:12 大小:56.73KB
下载 相关 举报
实验五图的基本操作.docx_第1页
第1页 / 共12页
实验五图的基本操作.docx_第2页
第2页 / 共12页
实验五图的基本操作.docx_第3页
第3页 / 共12页
实验五图的基本操作.docx_第4页
第4页 / 共12页
实验五图的基本操作.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验五图的基本操作.docx

《实验五图的基本操作.docx》由会员分享,可在线阅读,更多相关《实验五图的基本操作.docx(12页珍藏版)》请在冰豆网上搜索。

实验五图的基本操作.docx

实验五图的基本操作

实验五图的基本操作

一、实验目的

1、使学生可以巩固所学的有关图的基本知识。

2、熟练掌握图的存储结构。

3、熟练掌握图的两种遍历算法。

二、实验内容

本次实验提供4个题目,难度相当,学生可以根据自己的情况选做,其中题目一是必做题,其它选作!

√.题目一:

图的遍历(必做)

[问题描述]

  对给定图,实现图的深度优先遍历和广度优先遍历。

[基本要求]

   以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。

以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。

【测试数据】

  由学生依据软件工程的测试技术自己确定。

题目二:

在图G中求一条从顶点i到顶点s的简单路径

[测试数据]

自行设计

[题目三]:

在图G中求一条从顶点i到顶点s且长度为K的简单路径

[测试数据]

自行设计

三、实验前的准备工作

1、掌握图的相关概念。

2、掌握图的逻辑结构和存储结构。

3、掌握图的两种遍历算法的实现。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

5、实验步骤

(1)、数据结构与核心算法的设计描述

//邻接表创建图

intCreateGraph(Graph&G){

ArcNode*s;

cout<<"输入顶点和弧个数:

";

cin>>G.vernum>>G.arcnum;

cout<<"输入各顶点信息:

\n";

for(inti=0;i

cin>>G.ver[i].data;

G.ver[i].first=NULL;

}

cout<<"输入弧相关信息:

\n";

for(intj=0;j

for(intk=0;k

intflag;

cout<

(1-存在/0-不存在)";

cin>>flag;

if(flag==1){

s=newArcNode;

s->adjver=k;

s->next=G.ver[j].first;

G.ver[j].first=s;

s=newArcNode;

s->adjver=j;

s->next=G.ver[k].first;

G.ver[k].first=s;

}

}

}

return0;

}

//深度优先搜索遍历

voidDFS(Graph&G,inti){

cout<

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&G){

inti;

for(i=0;i

visited[i]=false;

for(i=0;i

if(!

visited[i])

DFS(G,i);

}

//广度优先搜索遍历

voidBFS(Graph&G,intk){

inti;

QueueQ;

ArcNode*p;

InitQueue(Q);

cout<

visited[k]=true;

EnQueue(Q,k);

while(Q.rear!

=Q.front){

i=DelQueue(Q);

p=G.ver[k].first;

while(p){

if(!

visited[p->adjver]){

cout<adjver].data;

visited[p->adjver]=true;

EnQueue(Q,p->adjver);

}

p=p->next;

}

}

}

voidBroadTraval(Graph&G){

inti;

for(i=0;i

visited[i]=false;

for(i=0;i

if(!

visited[i])

BFS(G,i);

}

㈡、函数调用及主函数设计

intmain(){

GraphG;

menu();

intflag=1;

while(flag){

intn;

cout<<"输入操作编号:

";

cin>>n;

switch(n){

case1:

CreateGraph(G);break;

case2:

LengthTraval(G);break;

case3:

BroadTraval(G);break;

}

intk;

cout<<"是否继续?

(1-继续/0-退出)";

cin>>k;

flag=k;

}

return0;

}

㈢程序调试及运行结果分析(应包含多组测试数据)

6、实验总结

这次实验,我真的懂得了好多东西。

我感觉自己有好多东西要学,自己现在的知识还很浅。

所以,我会好好努力的,继续加油。

 

程序清单:

#include

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(){

cout<<"|-------------------------------------------------|\n";

cout<<"|---****图的基本操作****---|\n";

cout<<"|---****1-创建图****---|\n";

cout<<"|---****2-深度优先遍历****---|\n";

cout<<"|---****3-广度优先遍历****---|\n";

cout<<"|-------------------------------------------------|\n";

}

//邻接表创建图

intCreateGraph(Graph&G){

ArcNode*s;

cout<<"输入顶点和弧个数:

";

cin>>G.vernum>>G.arcnum;

cout<<"输入各顶点信息:

\n";

for(inti=0;i

cin>>G.ver[i].data;

G.ver[i].first=NULL;

}

cout<<"输入弧相关信息:

\n";

for(intj=0;j

for(intk=0;k

intflag;

cout<

(1-存在/0-不存在)";

cin>>flag;

if(flag==1){

s=newArcNode;

s->adjver=k;

s->next=G.ver[j].first;

G.ver[j].first=s;

s=newArcNode;

s->adjver=j;

s->next=G.ver[k].first;

G.ver[k].first=s;

}

}

}

return0;

}

//深度优先搜索遍历

voidDFS(Graph&G,inti){

cout<

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&G){

inti;

for(i=0;i

visited[i]=false;

for(i=0;i

if(!

visited[i])

DFS(G,i);

}

//广度优先搜索遍历

typedefstruct{

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;

}

return0;

}

intDelQueue(Queue&Q){

intt;

if(Q.rear==Q.front)return0;

else{

t=Q.data[Q.front];

Q.front=(Q.front+1)%VERTEX_NUM;

returnt;

}

}

voidBFS(Graph&G,intk){

inti;

QueueQ;

ArcNode*p;

InitQueue(Q);

cout<

visited[k]=true;

EnQueue(Q,k);

while(Q.rear!

=Q.front){

i=DelQueue(Q);

p=G.ver[k].first;

while(p){

if(!

visited[p->adjver]){

cout<adjver].data;

visited[p->adjver]=true;

EnQueue(Q,p->adjver);

}

p=p->next;

}

}

}

voidBroadTraval(Graph&G){

inti;

for(i=0;i

visited[i]=false;

for(i=0;i

if(!

visited[i])

BFS(G,i);

}

intmain(){

GraphG;

menu();

intflag=1;

while(flag){

intn;

cout<<"输入操作编号:

";

cin>>n;

switch(n){

case1:

CreateGraph(G);break;

case2:

{

cout<<"深度优先遍历结果:

\n";

LengthTraval(G);}break;

case3:

{

cout<<"广度优先遍历结果:

\n";

BroadTraval(G);}break;

}

intk;

cout<<"是否继续?

(1-继续/0-退出)";

cin>>k;

flag=k;

}

return0;

}

流程图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1