图的遍历
1需求分析
【实验目的】
很多涉及图上操作的算法都是以图的遍历操作为基础的,通过这个实验的算法设计,可以巩固所学的有关图的基本知识。
【基本要求】
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。
2算法设计
1)为了实现上述程序功能,需要定义单链表的抽象数据类型:
定义边结点ArcNode
数据成员intadjvex;
structArcNodenextarc;
定义顶点信息VNode
数据成员VertexTypedata;
ArcNodefirstarc;
定义无向图typedefstruct
数据成员AdjListvertices;
intvexnum,arcnum;
定义链表typedefstructLNode
数据成员ElemTypedata;
structLNodenext;
定义头结点typedefstructQNode
数据成员QElemTypedata;
structQNodenext;
定义队列typedefstruct
数据成员QueuePtrfront;
QueuePtrrear;
2)本程序用到的主要函数:
InitQueue(LinkQueueamp;Q)初始化队
EnQueue(LinkQueueamp;Q,QElemTypee)入队
DeQueue(LinkQueueamp;Q,QElemTypeamp;e)出队
LocateVex(ALGraphG,charv)确定v在G中的位置
CreateDG(ALGraphamp;G)创建无向连通图的邻接表结构
FirstAdjvex(ALGraphG,intv)返回G中顶点v的第一个邻接点
NextAdjVex(ALGraphG,intv,intw)返回G中顶点v相对于w的下一个邻接点
BFSTraverse(ALGraphG)进行深度优先遍历
DFS(ALGraphG,intv,intvisited)
DFSTraverse(ALGraphG)进行广度优先遍历3调试分析
刚开始输入的是abcdef可是遍历出来的是123456的数字,后来将入前的出输改写成G。vertices〔w〕。data形式就可以了。
4经验收获和体会
每次都要写这个,我都不知写什么好了呵呵,嗯总体来说还是那句话程序要自已编出来的才叫好。无论编得怎么样总会学到东西的,编写的同时也可以复习以前的知识这样很好。
5测试数据及结果
6附录
includeiostream。h
includestdlib。h
typedefcharVertexType;
typedefintQElemType;
typedefintElemType;
typedefintStatus;
defineMAX20
defineok1
boolvisit〔MAX〕;
typedefstructArcNode定义边结点
{
intadjvex;
structArcNodenextarc;
}ArcNode;
typedefstructVNode定义顶点信息
{
VertexTypedata;
ArcNodefirstarc;
}VNode,AdjList〔MAX〕;
typedefstruct定义无向图
{
AdjListvertices;
intvexnum,arcnum;
}ALGraph;
typedefstructLNode定义链表
{
ElemTypedata;
structLNodenext;
}LNode,LinkList;
typedefstructQNode定义头结点
{
QElemTypedata;
structQNodenext;
}QNode,QueuePtr;
typedefstruct定义队列
{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
StatusInitQueue(LinkQueueamp;Q)初始化队
{
Q。frontnewQNode;
if(!Q。front)exit(
1);
Q。frontgt;nextNULL;
Q。rearQ。front;
returnok;
}
StatusEnQueue(LinkQueueamp;Q,QElemTypee)入队
{
QueuePtrp;
pnewQNode;
if(!p)exit(
1);
pgt;datae;
pgt;nextNULL;
Q。reargt;nextp;
Q。rearp;
returnok;
}
StatusDeQueue(LinkQueueamp;Q,QElemTypeamp;e)出队
{
if(Q。frontQ。rear)returnfalse;
QueuePtrp;
pQ。frontgt;next;
Q。frontgt;nextpgt;next;
epgt;data;
if(Q。rearp)Q。rearQ。front;
deletep;
returnok;
}
intLocateVex(ALGraphG,charv)确定v在G中的位置
{
for(inti0;ilt;G。vexnum;i)
if(G。vertices〔i〕。datav)
returni;
if(iG。vexnum)
{
coutlt;lt;你的输入有错请重新输入lt;lt;endl;
return1;
}
return0;
}
voidCreateDG(ALGraphamp;G)创建无向连通图的邻接表结构
{
coutlt;lt;请输入图的结点数:lt;lt;endl;
cingt;gt;G。vexnum;
coutlt;lt;请输入图的边数:lt;lt;endl;
cingt;gt;G。arcnum;
for(inti0;ilt;G。vexnum;i)构造表头向量
{
coutlt;lt;请输入第lt;lt;i1lt;lt;个结点的信息lt;lt;endl;
cingt;gt;G。vertices〔i〕。data;
G。vertices〔i〕。firstarcNULL;初始化头结点
}for(intk0;klt;G。arcnum;k)输入各边并构造邻接表
{
coutlt;lt;请输入第lt;lt;k1lt;lt;条边所对应的的两个结点lt;lt;endl;
e:intsLocateVex(G,v
1);确定v1在G中的位置
inttLocateVex(G,v
2);确定v2在G中的位置
if(slt;0tlt;0)
gotoe;
ArcNodepnewArcNode;
pgt;adjvext;
ArcNodeqG。vertices〔s〕。firstarc;采用头插法插入链表
G。vertices〔s〕。firstarcp;
pgt;nextarcq;因为是无向图,每条边对应两个结点
sLocateVex(G,v
2);
tLocateVex(G,v
1);
pnewArcNode;
pgt;adjvext;
qG。vertices〔s〕。firstarc;
G。vertices〔s〕。firstarcp;
pgt;nextarcq;
}
}
voidBFSTraverse(ALGraphG)进行广度优先遍历
{
intv,w,u;
intvisited〔MAX〕;
LinkQueueQ;
for(v0;vlt;G。vexnum;v)
visited〔v〕0;
InitQueue(Q);
for(v0;vlt;G。vexnum;v)
if(visited〔v〕0)
{
visited〔v〕1;
coutlt;lt;G。vertices〔v〕。datalt;lt;;
EnQueue(Q,v);
while(!(Q。rearQ。front))
{
DeQueue(Q,u);
for(wG。vertices〔u〕。data;
G。vertices〔u〕。firstarc!NULL;
wG。vertices〔u〕。firstarcgt;adjvex,
G。vertices〔u〕。firstarcG。vertices〔u〕。firstarcgt;nextarc)
if(visited〔w〕0)
{
visited〔w〕1;
coutlt;lt;G。vertices〔w〕。datalt;lt;;
EnQueue(Q,w);
}
}
}
}
voidDFS(ALGraphG,intv,intvisited)
{
intw;
visited〔v〕1;
coutlt;lt;G。vertices〔v〕。datalt;lt;;
for(wG。vertices〔v〕。data;
G。vertices〔v〕。firstarc!NULL;
wG。vertices〔v〕。firstarcgt;adjvex,
G。vertices〔v〕。firstarcG。vertices〔v〕。firstarcgt;nextarc)
if(visited〔w〕0)
DFS(G,w,visited);
}
voidDFSTraverse(ALGraphG)进行深度优先遍历
{
intv;
intvisited〔MAX〕;
for(v0;vlt;G。vexnum;v)
visited〔v〕0;
for(v0;vlt;G。vexnum;v)
if(visited〔v〕0)
DFS(G,v,visited);
}
intmain()主函数
{
ALGraphG;
CreateDG(G);
coutlt;lt;深度优先遍历序列:;
DFSTraverse(G);
coutlt;lt;endl;
coutlt;lt;广度优先遍历序列:;
BFSTraverse(G);
coutlt;lt;endl;
return0;
浅谈乡村教育运动促农业教育发展论文一乡村教育运动促进了高等农业教育的勃兴和农业学科调整教育与经济社会的关系决定了教育必然反映经济社会发展状况,并体现教育为经济社会发展服务的职能。为适应乡村教育运动的需要,20世纪二
乡村中学生心理教育提升思路论文一学习心理障碍也许用障碍一词显得严重,但确实有达到这个地步的。笔者所在地区是不发达的农村,他们在小学时课程少,基本上处于无竞争无压力的学习状态,并且无论学习好坏,都能顺利地升入中学
浅谈高中数学应用题教学论文摘要高中学生认识问题的思维已从经验型向理论性转化,已经能够逐步摆脱具体形象和直接经验的限制,借助于概念进行合乎逻辑的抽象思维活动,开始在教师的帮助下独立收集事实材料,进行分类综合。
研究高中数学教学提升思路论文3篇高中数学教学提升思路论文一一提前备考,树立学困生学习信心第一,展开提前备考策略学生都有一个共性,就是受到高分成绩的激励之后,就会更加努力的学习,并且会持续一段时间对学困生展开提前备
关于设立气候资源国家所有权的研究论文一气候资源不属于法定的自然资源范畴(一)自然资源的概念有广义与狭义之分顾名思义,自然资源即是来自于自然界的资产的来源,其经济学特色十分明显。辞海一书中关于自然资源的定义是一般天然存
数学课程整合思考的研究论文摘要信息技术与数学课程的整合由于能有效提高教学效益,因而得到了广泛运用。但整合过程中也出现了目标定位不准忽略学科特点教学设计不当课件制作粗糙信息技术运用能力不强等问题,并制定了解决
房地产企业融资论文房地产企业融资论文该怎么写?为大家整理了房地产企业融资论文,希望对大家有帮助。1。融资的现状分析广州华南商贸职业学院曾小燕解析民间金融现状问题及应对策略指出我国民间融资活跃,主要方
中文系论文格式及范文阅读是学生与文本亲密谈话的过程,与问本走得更近,学生的感受就更为真切,更为深刻。小编精心为你整理了中文系论文格式及范文,希望对你有所借鉴作用哟。中文系毕业论文范文一课程改革下的语文
企业行政管理的论文企业行政管理是企业管理与行政管理相结合而产生的一个概念。企业行政管理既非一般的政府行政管理,也非企业管理,其涵义是指企业行政系统为了企业的生存与发展而依靠一定的法律制度原则及方法对
大学生心理健康教育教学师资建设研究论文一大学生心理健康教育课程教学师资建设的意义我国的心理健康教育与国外相比,起步较晚,心理健康师资建设较为薄弱,大多数的心理健康教育教师没有受过系统的专业培训,且人数不足,无法满足高校
中国精神相关论文熊人!我的理解意思是没能力,让自已及周围的人受尽了苦难!但是今天我对熊人有了另一个理解,在艰苦的生活中仍能坚持开拓的能人!这一幕的变化发生在中街新东北影城的中央播放厅内,大屏幕上周
学习心理辅导赏识教育的运用论文摘要学习心理辅导是基于心理学原理的一种学习辅导,在学习心理辅导中,赏识教育的方法和理念渗透可以提高。关键词赏识教育心理辅导应用学习心理辅导是指教师运用心理学的有关原理对学生在学习活
对建筑管理中协同管理的运用的分析论文摘要随着建筑行业的迅速发展,建筑管理发生了巨大的变化,传统的建筑管理已经不能适应时代发展的要求,为了进一步适应新的挑战和要求,协同管理应用而生。由于建筑管理是一项长期性的工程,涉及
配电房高低压开关选择探讨论文摘要随着国家经济的快速发展,电力行业也在不断地进步与更新。最关键的配供电单元是配电室并且配电室在lOkV配电系统中有着非常重要的地位。同时,配电室中存在许多较复杂的设备,能够协调和
小学数学游戏教学论文第一篇一在玩中学通过创设游戏环节让学生边玩边学。例如,在教学可能性时,为了让学生体会事件发生的可能性,能用一定不可能可能描述生活中的事情,课中笔者设计了分组摸球游戏。游戏每6人一组
关于小学数学合作探究教学论文一新课程改革背景下小学数学合作教学模式所具有的特征传统的教学模式重视知识的掌握,忽略学生能力的探究,看重教师讲得怎么样,忽视学生学的怎么样,可以说只注重结果而忽视过程。这种教学模式
现代教育技术的英语教学论文一激发学生学习兴趣多媒体为代表的现代教育技术课件为中小学英语教师提供了一个全新的教学模式,把传统教学中抽象的枯燥的学习内容转化成现代课堂中身临其境的动感内容。当学生置身于多媒体教学
小学数学教师教学论文数学是其他自然科学的基础和保证,因此,学好数学对于学生以后其他学科的学习具有非常重要的现实意义。小编收集了小学数学教师教学论文,欢迎阅读。小学数学教师教学论文一一教师应当接受专业的
关于音乐的教学论文导语音乐是人类灵魂的艺术表现,从古典音乐中寻找精神寄托。以下是小编为大家整理的关于音乐的教学论文,欢迎大家阅读与借鉴!关于音乐的教学论文摘要音乐是以声音来表达内心情感的艺术,是人类
小学音乐欣赏教学论文引导语音乐本身是一种声音和时间的艺术,一切音乐活动都是从听开始的。下面是小编为你带来的小学音乐欣赏教学论文。希望对你有所帮助。音乐本身是一种声音和时间的艺术,一切音乐活动都是从听开
音乐鉴赏结课论文乐鉴赏课是一门听的艺术。什么样的音乐都离不开听。听是一种音乐作品,我们既要在听的进程中让感官得到愉悦,又要使精神得到升华,感性和理性进行完美的结合才是我们听的根本意义所在。以下是小
民族音乐发展现状及建议论文摘要中国一个悠久的国度,有着深厚的文化底蕴,在饱经沧桑的日子里依旧用歌声记录着岁月变迁,如今随着我国经济脚步的发展,对于政治和文化的影响日益深远,而民族音乐做为艺术文化的重要组成部