图的遍历
1.需求分析
【实验目的】
很多涉及图上操作的算法都是以图的遍历操作为基础的,通过这个实验的算法设计,可以巩固所学的有关图的基本知识。
【基本要求】
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。
2.算法设计
1)为了实现上述程序功能,需要定义单链表的抽象数据类型:
定义边结点 ArcNode
数据成员 int adjvex;
struct ArcNode *nextarc;
定义顶点信息 VNode
数据成员 VertexType data;
ArcNode *firstarc;
定义无向图 typedef struct
数据成员 AdjList vertices;
int vexnum,arcnum;
定义链表 typedef struct LNode
数据成员 ElemType data;
struct LNode *next;
定义头结点 typedef struct QNode
数据成员 QElemType data;
struct QNode *next;
定义队列 typedef struct
数据成员 QueuePtr front;
QueuePtr rear;
2)本程序用到的主要函数:
InitQueue(LinkQueue &Q) //初始化队
EnQueue(LinkQueue &Q,QElemType e) //入队
DeQueue(LinkQueue &Q,QElemType &e) //出队
LocateVex(ALGraph G,char v) //确定v在G中的位置
CreateDG(ALGraph &G) //创建无向连通图的邻接表结构
FirstAdjvex(ALGraph G,int v) //返回G中顶点v的第一个邻接点
NextAdjVex(ALGraph G,int v,int w) //返回G中顶点v相对于w的下一个邻接点
BFSTraverse(ALGraph G) //进行深度优先遍历
DFS(ALGraph G,int v,int *visited)
DFSTraverse(ALGraph G) //进行广度优先遍历3.调试分析
刚开始输入的是abcdef可是遍历出来的是123456的数字,后来将入前的出输改写成G.vertices[w].data形式就可以了。
4.经验收获和体会
每次都要写这个,我都不知写什么好了呵呵,嗯总体来说还是那句话程序要自已编出来的才叫好。无论编得怎么样总会学到东西的,编写的同时也可以复习以前的知识这样很好。
5.测试数据及结果
6.附录
#include"iostream.h"
#include"stdlib.h"
typedef char VertexType;
typedef int QElemType;
typedef int ElemType;
typedef int Status;
#define MAX 20
#define ok 1
bool visit[MAX];
typedef struct ArcNode //定义边结点
{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode //定义顶点信息
{
VertexType data;
ArcNode *firstarc;
}VNode,AdjList[MAX];
typedef struct //定义无向图
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
typedef struct LNode //定义链表
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef struct QNode //定义头结点
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct //定义队列
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q) //初始化队
{
Q.front=new QNode;
if(!Q.front)exit(-
1);
Q.front->next=NULL;
Q.rear=Q.front;
return ok;
}
Status EnQueue(LinkQueue &Q,QElemType e) //入队
{
QueuePtr p;
p=new QNode;
if(!p)exit(-
1);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return ok;
}
Status DeQueue(LinkQueue &Q,QElemType &e) //出队
{
if(Q.front==Q.rear)return false;
QueuePtr p;
p=Q.front->next;
Q.front->next=p->next;
e=p->data;
if(Q.rear==p)Q.rear=Q.front;
delete p;
return ok;
}
int LocateVex(ALGraph G,char v) //确定v在G中的位置
{
for(int i=0;i<G.vexnum;i++)
if(G.vertices[i].data==v)
return i;
if(i==G.vexnum)
{
cout<<"你的输入有错请重新输入"<<endl;
return -1;
}
return 0;
}
void CreateDG(ALGraph &G) //创建无向连通图的邻接表结构
{
cout<<"请输入图的结点数:"<<endl;
cin>>G.vexnum;
cout<<"请输入图的边数:"<<endl;
cin>>G.arcnum;
for(int i=0;i<G.vexnum;i++) //构造表头向量
{
cout<<"请输入第"<<i+1<<"个结点的信息"<<endl;
cin>>G.vertices[i].data;
G.vertices[i].firstarc=NULL; //初始化头结点
} for(int k=0;k<G.arcnum;k++) //输入各边并构造邻接表
{
cout<<"请输入第"<<k+1<<"条边所对应的的两个结点"<<endl;
e: int s=LocateVex(G,v
1); //确定v1在G中的位置
int t=LocateVex(G,v
2); //确定v2在G中的位置
if(s<0||t<0)
goto e;
ArcNode *p=new ArcNode;
p->adjvex=t;
ArcNode *q=G.vertices[s].firstarc; //采用头插法插入链表
G.vertices[s].firstarc=p;
p->nextarc=q; //因为是无向图,每条边对应两个结点
s=LocateVex(G,v
2);
t=LocateVex(G,v
1);
p=new ArcNode;
p->adjvex=t;
q=G.vertices[s].firstarc;
G.vertices[s].firstarc=p;
p->nextarc=q;
}
}
void BFSTraverse(ALGraph G) //进行广度优先遍历
{
int v,w,u;
int visited[MAX];
LinkQueue Q;
for(v=0;v<G.vexnum;++v)
visited[v]=0;
InitQueue(Q);
for(v=0;v<G.vexnum;++v)
if(visited[v]==0)
{
visited[v]=1;
cout<<G.vertices[v].data<<" ";
EnQueue(Q,v);
while(!(Q.rear==Q.front))
{
DeQueue(Q,u);
for(w=G.vertices[u].data;
G.vertices[u].firstarc!=NULL;
w=G.vertices[u].firstarc->adjvex,
G.vertices[u].firstarc=G.vertices[u].firstarc->nextarc)
if(visited[w]==0)
{
visited[w]=1;
cout<<G.vertices[w].data<<" ";
EnQueue(Q,w);
}
}
}
}
void DFS(ALGraph G,int v,int *visited)
{
int w;
visited[v]=1;
cout<<G.vertices[v].data<<" ";
for(w=G.vertices[v].data;
G.vertices[v].firstarc!=NULL;
w=G.vertices[v].firstarc->adjvex,
G.vertices[v].firstarc=G.vertices[v].firstarc->nextarc)
if(visited[w]==0)
DFS(G,w,visited);
}
void DFSTraverse(ALGraph G) //进行深度优先遍历
{
int v;
int visited[MAX];
for(v=0;v<G.vexnum;++v)
visited[v]=0;
for(v=0;v<G.vexnum;++v)
if(visited[v]==0)
DFS(G,v,visited);
}
int main()//主函数
{
ALGraph G;
CreateDG(G);
cout<<"深度优先遍历序列:";
DFSTraverse(G);
cout<<endl;
cout<<"广度优先遍历序列:";
BFSTraverse(G);
cout<<endl;
return 0;
朗续训练教学论文精选注重朗读能吸引学生主动融入阅读情境,感受语言的神奇内容的丰富多彩内蕴的意味绵长,与作者心灵相通,感悟美体验美,得到爱的抚慰情的熏陶。从而促进学生阅读意识,能力与品质充分发展。朗读一
校企合作与吉他营销模式研究的论文摘要在高校开展创业教育,培养创新型人才,已成为当前高等教育改革和发展的迫切需要。地方高校是为社会提供人才的重要场所,所以校企合作不仅锻炼学生创新创业的能力,还方便了企业以一个低成本
关于国际贸易专业的论文国际贸易也称通商,是指跨越国境的货品和服务交易,一般由进口贸易和出口贸易所组成,因此也可称之为进出口贸易。国际贸易也叫世界贸易。进出口贸易可以调节国内生产要素的利用率,改善国际间的
初中体育篮球教学论文在中学体育教学中,我们要考虑他们掌握篮球技术的现状,为我们的教学做好向导。下面是小编为大家整理的初中体育篮球教学论文,欢迎阅读。摘要初中教学中开展了篮球教学课程,深受学生的欢迎。篮
试论媒介整合时代下中国新闻教育改革认知误区的解读文学论文摘要在媒介整合时代下的中国新闻教育改革大致沿袭三条路径即分别作为专业课程专业方向和教育理念来加以建设现有的新闻教育体系。但是由于对媒介融合实质存在认知误区,三种路径在现实发展中都存
小学语文课堂教学中创新能力的培养分析论文摘要小学语文课堂如何充分发挥其学科的优势,从小培养学生的创新意识和能力,允许学生对他人乃至老师的观点提出不同的看法,形成自由探讨,自由争论的氛围,这样才能充分发挥学生探索问题的主动
打造文化旅游节点培育现代服务业发展新优势论文在我国的社会经济生活实践中,现代服务业已成为提供高质量的生活服务和生产服务的国民经济新兴领域,其发达程度是21世纪城市和地区竞争力及现代化的重要标志。作为朝阳产业的文化旅游产业,不
冶金业电磁凝固研究论文1引言在材料科学领域里,控制材料的凝固过程是提高传统工程材料和铸件性能以及开发新材料的重要途径。近几十年来,人们在利用各种手段控制凝固过程的研究和生产实践中发现,综合利用电磁场的多
膜电力电容器发展的论文摘要从介质材料结构工艺等方面介绍了全膜电力电容器的发展及桂容厂全膜电容器生产技术特点,并结合实际工作经验提出了全膜电容器的技术重点研究方向。关键词电力电容器全膜发展1概述20世纪6
高校基本建设项目决算规范化管理论文范文一高校基本建设项目账务决算中存在的问题(一)学校对基建投资项目的可行性研究处理不当高校基建项目建设的可行性研究编制过于简单,设立出发点是为了获取项目资金,项目建设的目标定位不明确建
混凝土的结构设计研究论文高层建筑中结构设计的安全性原则,亦是以设计使用年限为依据,使该建筑的结构设计在预定年限范围内,始终可以达到对内部与外部各项荷载力的有效承受,即使遭遇某些偶然的破坏性事故,也要能够使
探析板式蒸发式空冷器在甲乙酮装置的应用目前,甲乙酮装置脱丁烯塔空冷器E008在每年夏季一直是仲丁醇合成工段粗SBA产量的ldquo瓶颈rdquo,进而影响甲乙酮的产量。同时该空冷器存在检维修难,防冻防凝难等缺点。因此,
关于胶原蛋白在造纸中的应用摘要介绍胶原蛋白的提取方法,结构和化学性质,重点介绍了胶原蛋白在造纸中的应用。关键词胶原蛋白造纸化学性质性质1。引言胶原纤维是构成皮的主要成分,胶原蛋白是形成胶原纤维的基本单位,由
漫谈三聚氰胺摘要是一种重要的氮杂环有机化工原料。工业上三聚氰胺由双氰(酰)胺与氨在高温下反应或由尿素直接在高温高压下制得,后者成本低,较多采用。食品工业上普遍采用的被定为国家标准的是凯氏定氮法
论数控机床精度的检测论文关键词数控机床几何精度定位精度切削精度检测与注意事项论文摘要现代数控机床集合了电子计算机伺服系统自动控制系统精密测量系统及新型机构等先进技术,能够加工形状复杂精密小批量零件,并
关于环境公益诉讼原告资格的司法实践的研究公益诉讼是一个极具创造性的制度设计,实践表明,用公益诉讼方式来满足当下新的社会需求,已成为一种全球现象。从当前中国司法实践来看,环境公益诉讼的主体资格已成为环境公益诉讼研究的核心问
对环境公益诉讼中适格原告的思考简说近年来,我国经济发展较快,基础设施建设得到发展,人民生活水平极大提高。但是,随着发展而来的是环境的不断恶化。怎样更好的解决环境问题,全国各界都提出了有益的建议,做出了许多尝试。作为
浅谈环境公益诉讼之适格原告及其争议环境公益诉讼在我国法律上至今缺乏明文规定,这一开放性极强的话题也成为诸多学者争论的对象,尤其是对适格的环境公益诉讼的起诉主体的争辩更是激烈。从理论上讲,任何个人组织和国家机关都可以
有关环境工程建设与生态环境的关系探析经济在快速进步,这种形势下更多人也意识到环保的必要价值,开始重视环保。环境工程的内涵为针对环境污染,探析相应的防治手段及技术。这种基础上,致力于防控更广范围的环境污染,消除多层次的
农村水电史实与改革发展(之六)综合新能源论文(1)(四)新世纪以来的农村水电及电气化事业(1)18进入新世纪,我国农村水电及电气化事业进入新阶段肩负新使命实现新任务进入新世纪,以贯彻落实中共中央中发20022号文件20033号文件
农村水电史实与改革发展(之五)综合新能源论文(1)(三)水利系统水电改革与发展思路(2)15。改革体制,创新机制,实行农村水电资产战略性重组贯彻党的十五大精神和水利系统水电改革与发展思路,针对农村水电企业规模小经营分散集约化程度低
农村水电行业管理断议综合新能源论文(1)(一)开头语1。农村水电是农村公共设施和基础设施新时期,党中央国务院将农村水电列为覆盖千家万户,促进农民增收效果更显著的农村公共设施基础设施和ldquo六小工程rdquo,要求放在