数据结构与算法分析(八)——BFS算法
图的建立
图的组成:
顶点(Vertices)、边(Edges)
图的一些概念:
1.邻接(adjacent):v1和v2相连接
2.路径(path):一个顶点序列
3.圈(cycle):一个顶点出现了两次
图的表示:
1.邻接矩阵(空间大,但是速度快)
2.邻接表(空间小,但速度慢)
代码实现:
实现的是无权图
1.根据边的数目确定循环次数(一条边对应两个顶点)
2.用一个元素为vector的数据去组织数据,即每个顶点对应一个vector存放邻接顶点
3.每一次存放一条边对应的两个顶点
/***@name Build_Graph:建立一个无权无向图 手动输入或者从二维数组中读取
**/
void Build_Graph()
{//手动输入图中的相邻节点/*int num;int n,m;cout<<"please input the edge num"<<endl;cin>>num;for(int i=0;i<num;i++){cout<<"please input two Adjacent vertex"<<endl;cin>>n>>m;Graph[n].push_back(m);Graph[m].push_back(n);}*///从二维数组中读取for(int i=0;i<12;i++){Graph[vertex_couple[i][0]].push_back(vertex_couple[i][1]);Graph[vertex_couple[i][1]].push_back(vertex_couple[i][0]);}
}
BFS
广度优先遍历,搜索最短路径
算法描述:
1.给定起点和终点,从起点开始辐射;
2.利用队列去存放待辐射的顶点,首先应将起点推入队列;
3.从起点辐射到起点的所有邻接顶点,将起点推出队列(并标记已访问过),将所有邻接顶点(未访问过的)推入队列,并标记他们的上一顶点(为了最后的还原路径);
4.持续辐射,直到匹配到终点,然后利用之前标记的上一顶点,还原出最短路径;
代码实现:
/***@name BFS:广度搜索*@param1 T:传入的邻接表*@param2 s0:起始位置*@param3 st:终止位置
**/
void BFS(vector<int> T[max_size],int s0,int st)
{queue<int> Q;int Know[10]={0};int v;int pre[10]={0}; //用来保存上一节点Q.push(s0);Know[s0]=1;while(!Q.empty()){v=Q.front();Q.pop();for(int i=0;i<T[v].size();i++){if(Know[T[v][i]]==0) //找到未访问过的节点{if(T[v][i]==st){int temp=T[v][i];vector<int> result;pre[T[v][i]]=v;//将路径还原while(temp!=s0) //一直迭代到初始值,将结果存放在vector中{result.push_back(temp);temp=pre[temp]; //从后往前还原路径}result.push_back(temp); //保存初始值//输出最短路径cout<<"the path is "<<endl;vector<int>::iterator it; //定义一个迭代器 从后向前迭代for(it=result.end()-1;it!=result.begin();it--){cout<<*it<<" ";}cout<<*it<<endl; //输出目标位置return;}else{Q.push(T[v][i]); //推入队列Know[T[v][i]]=1; //标记为已访问过pre[T[v][i]]=v; //保存上一节点}}}}
}
未完待续。。。
数据结构与算法分析(八)——BFS算法相关推荐
- 《数据结构与算法分析》回溯算法之博弈——三连棋(tic tac toe)人机对战AI设计(αβ枝减)
前言: 这次的回溯算法实在是太有意思了,不过刚刚接触的时候确实不容理解,极小极大策略,αβ枝减看了好几遍才明白整个过程.实现的时候又发现还有细节不明白,想明白之后对于整体的认识又加深了一步. 编码的过 ...
- 八十五、Python | Leetcode数据结构之图和动态规划算法系列
@Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- java数据结构与算法_清华大学出版社-图书详情-《数据结构与算法分析(Java版)》...
前 言 数据结构是计算机程序设计重要的理论技术基础,它不仅是计算机学科的核心课程,而且已经成为计算机相关专业必要的选修课.其要求是学会分析.研究计算机加工的数据结构的特性,初步掌握算法的时间和空间分析 ...
- 数据结构与算法分析 收获总结 第1章 数据结构和算法
这学期学这门课到现在为止,还是感觉难度很大,当然老师可能讲得也有点偏离书本,有时候听得有点蒙. 干脆来根据教材写个总结,用的教材是 <数据结构与算法分析>C++ 第3版 电子工业出版社 第 ...
- 计算机学院算法实验报告,四川大学计算机学院数据结构与算法分析实验报告
四川大学计算机学院数据结构与算法分析实验报告 (61页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 21.9 积分 <数据结构与算法>课程设计 ...
- 八皇后BFS算法、DFS算法、A*算法代码理解
代码参考了Python:DFS/BFS/UCS解决八皇后问题_流动的风与雪的博客-CSDN博客 和Python:GBF/A*算法解决八皇后问题_流动的风与雪的博客-CSDN博客 但是我花了两天时间才看 ...
- 数据结构与算法分析 ——回溯算法之收费公路重建问题
数据结构与算法分析第十章回溯算法之收费公路重建问题 一. 问题描述: 设给定N个点p1, p2,-,pn,它们位于x-轴上.xi是pi点的x坐标.这N个点确定了N(N-1)/2个点间距离.显然,如果 ...
- python数据结构与算法40题_Python数据结构与算法分析(笔记与部分作业)
最近为了给写搬砖脚本增加一些算法知识,脑残的看起来算法书.Python数据结构与算法分析,本人英语比较差,看的是翻译版本的. 网上有免费的原版的:https://runestone.academy/r ...
- 数据结构与算法分析c++第四版_数据结构与算法 - 时空复杂度分析
这周主要总结了时间复杂度的学习,跟小伙伴们分享下,欢迎指正. 一.为何需要分析算法复杂度 挺多同学本科都学习过数据结构和算法这门课,但是有没有想过这门课到底是解决什么问题?科学家设计这些数据结构和算法 ...
- (王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想、代码、演示、答题规范)
文章目录 一:BFS算法基本思想 二:BFS算法代码 三:反思 最短路径shortestpath):主要有以下两类最短路径问题 单源最短路径问题:一个顶点到其他顶点最短路径 迪杰斯特拉算法(dijks ...
最新文章
- Kmeans++、Mini-Batch Kmeans、Bisecting Kmeans、K中心点(K-Medoids)算法、K众数聚类、核K均值聚类
- 微信小程序验证车牌号(含新能源车牌)
- 【知识便利贴】ImageNet得的比Best Paper还牛的Longuet-Higgins奖是啥?
- winCVS 使用方法
- centos activemq 集群配置 Networks of Brokers
- 计算机组成原理mw,计算机组成原理 存储器
- 报名 | 上道沙龙:科技如何赋能传统金融?
- PCWorld:Android游戏业务渐露锋芒
- 移动端证件识别,支持离线识别
- PHP的电子邮件列表替代方法:使用Mailgun的List API
- [附源码]计算机毕业设计Python保护濒危动物公益网站(程序+源码+LW文档)
- 爱上开源之一款查询docker容器启动命令的工具
- 自学整理之HTML5常用标签和知识——小白篇
- WarGame bandit
- 用PHPExcel读取excel文件内容
- 诱饵扫描_这是标题点击诱饵吗
- windows下快速安装nginx 并配置 开机自启动
- 让Axmath自动插入公式编号并根据章节排号
- MyIE4.0又回来了,GreenBrowser后续开发,重新开源,大赞
- 最小拍无差控制器MATLAB求解,最小拍控制器设计.doc
热门文章
- 鸿蒙设备开发环境搭建-2021-3
- 时间序列趋势判断(三)——Mann-Kendall趋势检验
- 无界面chrome + selenium爬虫
- 计算机2级c 语言题库,计算机2级C语言题库.doc
- ajax如何进行逻辑判断,如何使Ajax的某些部分同步发生,而前端逻辑异步发生?...
- linux下安装nginx tar包,Linux环境下Nginx的安装
- 2.js深入(以通俗易懂的语言解释JavaScript)
- ASP.NET MVC多语言 仿微软网站效果(转)
- 清北考前刷题day6下午好
- 理解《Deblurring Text Images via L0-Regularized Intensity and Gradient Prior》