图的建立

图的组成:
顶点(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算法相关推荐

  1. 《数据结构与算法分析》回溯算法之博弈——三连棋(tic tac toe)人机对战AI设计(αβ枝减)

    前言: 这次的回溯算法实在是太有意思了,不过刚刚接触的时候确实不容理解,极小极大策略,αβ枝减看了好几遍才明白整个过程.实现的时候又发现还有细节不明白,想明白之后对于整体的认识又加深了一步. 编码的过 ...

  2. 八十五、Python | Leetcode数据结构之图和动态规划算法系列

    @Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  3. java数据结构与算法_清华大学出版社-图书详情-《数据结构与算法分析(Java版)》...

    前 言 数据结构是计算机程序设计重要的理论技术基础,它不仅是计算机学科的核心课程,而且已经成为计算机相关专业必要的选修课.其要求是学会分析.研究计算机加工的数据结构的特性,初步掌握算法的时间和空间分析 ...

  4. 数据结构与算法分析 收获总结 第1章 数据结构和算法

    这学期学这门课到现在为止,还是感觉难度很大,当然老师可能讲得也有点偏离书本,有时候听得有点蒙. 干脆来根据教材写个总结,用的教材是 <数据结构与算法分析>C++ 第3版 电子工业出版社 第 ...

  5. 计算机学院算法实验报告,四川大学计算机学院数据结构与算法分析实验报告

    四川大学计算机学院数据结构与算法分析实验报告 (61页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 21.9 积分 <数据结构与算法>课程设计 ...

  6. 八皇后BFS算法、DFS算法、A*算法代码理解

    代码参考了Python:DFS/BFS/UCS解决八皇后问题_流动的风与雪的博客-CSDN博客 和Python:GBF/A*算法解决八皇后问题_流动的风与雪的博客-CSDN博客 但是我花了两天时间才看 ...

  7. 数据结构与算法分析 ——回溯算法之收费公路重建问题

    数据结构与算法分析第十章回溯算法之收费公路重建问题 一.  问题描述: 设给定N个点p1, p2,-,pn,它们位于x-轴上.xi是pi点的x坐标.这N个点确定了N(N-1)/2个点间距离.显然,如果 ...

  8. python数据结构与算法40题_Python数据结构与算法分析(笔记与部分作业)

    最近为了给写搬砖脚本增加一些算法知识,脑残的看起来算法书.Python数据结构与算法分析,本人英语比较差,看的是翻译版本的. 网上有免费的原版的:https://runestone.academy/r ...

  9. 数据结构与算法分析c++第四版_数据结构与算法 - 时空复杂度分析

    这周主要总结了时间复杂度的学习,跟小伙伴们分享下,欢迎指正. 一.为何需要分析算法复杂度 挺多同学本科都学习过数据结构和算法这门课,但是有没有想过这门课到底是解决什么问题?科学家设计这些数据结构和算法 ...

  10. (王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法基本思想 二:BFS算法代码 三:反思 最短路径shortestpath):主要有以下两类最短路径问题 单源最短路径问题:一个顶点到其他顶点最短路径 迪杰斯特拉算法(dijks ...

最新文章

  1. Kmeans++、Mini-Batch Kmeans、Bisecting Kmeans、K中心点(K-Medoids)算法、K众数聚类、核K均值聚类
  2. 微信小程序验证车牌号(含新能源车牌)
  3. 【知识便利贴】ImageNet得的比Best Paper还牛的Longuet-Higgins奖是啥?
  4. winCVS 使用方法
  5. centos activemq 集群配置 Networks of Brokers
  6. 计算机组成原理mw,计算机组成原理 存储器
  7. 报名 | 上道沙龙:科技如何赋能传统金融?
  8. PCWorld:Android游戏业务渐露锋芒
  9. 移动端证件识别,支持离线识别
  10. PHP的电子邮件列表替代方法:使用Mailgun的List API
  11. [附源码]计算机毕业设计Python保护濒危动物公益网站(程序+源码+LW文档)
  12. 爱上开源之一款查询docker容器启动命令的工具
  13. 自学整理之HTML5常用标签和知识——小白篇
  14. WarGame bandit
  15. 用PHPExcel读取excel文件内容
  16. 诱饵扫描_这是标题点击诱饵吗
  17. windows下快速安装nginx 并配置 开机自启动
  18. 让Axmath自动插入公式编号并根据章节排号
  19. MyIE4.0又回来了,GreenBrowser后续开发,重新开源,大赞
  20. 最小拍无差控制器MATLAB求解,最小拍控制器设计.doc

热门文章

  1. 鸿蒙设备开发环境搭建-2021-3
  2. 时间序列趋势判断(三)——Mann-Kendall趋势检验
  3. 无界面chrome + selenium爬虫
  4. 计算机2级c 语言题库,计算机2级C语言题库.doc
  5. ajax如何进行逻辑判断,如何使Ajax的某些部分同步发生,而前端逻辑异步发生?...
  6. linux下安装nginx tar包,Linux环境下Nginx的安装
  7. 2.js深入(以通俗易懂的语言解释JavaScript)
  8. ASP.NET MVC多语言 仿微软网站效果(转)
  9. 清北考前刷题day6下午好
  10. 理解《Deblurring Text Images via L0-Regularized Intensity and Gradient Prior》