栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++ 实现广度优先搜索 队列】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++ 实现广度优先搜索 队列】

1.广度优先搜索算法思想

设置某节点V1为初始节点,搜索该节点的未经过邻接节点(后要在标记经过)后,再次搜索该节点的未经过邻接节点(要标记经过),之后重复操作。注意所给的节点直接都可以连通起来(即:连通块>1),在以没有经过的节点为初始节点再次进行上述的广度搜索。  在所有的节点都标为经过后广度优先搜索结束。

2.实例展示:

以A为初始节点:第一层:A,第二层:BFC,EFB,..(邻接节点的储存顺序不定,取决于实际代码写法,但存入顺序会决定搜索后续点的邻接节点的先后)

如为:EFB,则E->DC   F->NULL    B->NULL       序列:AEFBDC

2.队列使用

(1)队列:储存节点,实现广度优先搜索的搜索顺序

(2)实现说明:

设置初始节点,将其压入队列中,搜索队列储存首节点的未经邻接节点,在标记“经过”(保证后续压入队列中不会重复)后依次压入队列中,将当前首节点出队列(首节点已经搜索完毕,出队列,搜索下一个--也就是后续压入的“邻接节点”),后面就是重复操作。直至队列无元素(注意是否出现连通块>1)

3.节点邻接节点的储存

(1)数组

因未输入关系前,邻接节点个数未知,不妨使用vector动态数组,通过push_back()将邻接节点加入数组  a 尾部。

struct node
{
	vector a;
};

4.寻找节点未经邻接节点

queue q;//队列
node* p=new node[vnum];
int* visited=new int[vnum];//记录顶点是否经过
int v1//当前节点
for(int i=0;i 

4.注释:

(1)可以看出一次又一次压入的一系列节点是是一层一层的关系,初始节点是第一层,初始节点的邻接节点是由初始节点为中心向外发散的第二层,再次搜索这些邻接节点的邻接节点为第三层

(2)出队列的节点排序为广度优先搜索的搜索顺序

最后:文章主要是笔者自己,针对于自己当前所学到的知识做的笔记,可能有表述错误,说明不够简明易懂,自己也会慢慢在诸多方面进步。高兴对你学习有帮助,不喜请不要喷。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号