广度优先搜索(Breadth-first search)

广度优先搜索简称广搜或者BFS,BFS和DFS一样是一种图算法,dijkstra算法和最小生成树prim算法也有用到BFS的思想。通俗一点讲BFS就是暴力的辐射状一样搜索每一种可能出现的情况来找到答案。

下面来我们还是先看个图

让我们从1开始,同时我们用队列来模拟(因为大部分BFS程序都是拿队列来实现的),

选到1我们就把1从队列中拿出去,然后把1的邻接点2和5放入队列中。

然后把队列中的2拿出来,又把2的邻接点3和4放入到队列中。

然后把队列中的5拿出来,把5的邻接点6放进去。

最后把队列中的3 4 6 拿出来,由于没有点可以再放入到队列中所以就得到了结果 :1 2 5 3 4 6

大概思想我们讲完了,作者比较菜,大家有什么不懂可以参考B站大佬正月点灯笼的视频附上链接https://www.bilibili.com/video/av25761720

讲完思想我们来做题,hdu的1548和 2717 以1548为例子

HDU1548

A strange lift

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 38453 Accepted Submission(s): 13524

Problem Description

There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two buttons: up and down.When you at floor i,if you press the button “UP” , you will go up Ki floor,i.e,you will go to the i+Ki th floor,as the same, if you press the button “DOWN” , you will go down Ki floor,i.e,you will go to the i-Ki th floor. Of course, the lift can’t go up high than N,and can’t go down lower than 1. For example, there is a buliding with 5 floors, and k1 = 3, k2 = 3,k3 = 1,k4 = 2, k5 = 5.Begining from the 1 st floor,you can press the button “UP”, and you’ll go up to the 4 th floor,and if you press the button “DOWN”, the lift can’t do it, because it can’t go down to the -2 th floor,as you know ,the -2 th floor isn’t exist.
Here comes the problem: when you are on floor A,and you want to go to floor B,how many times at least he has to press the button “UP” or “DOWN”?

Input

The input consists of several test cases.,Each test case contains two lines.
The first line contains three integers N ,A,B( 1 <= N,A,B <= 200) which describe above,The second line consist N integers k1,k2,…kn.
A single 0 indicate the end of the input.

Output

For each case of the input output a interger, the least times you have to press the button when you on floor A,and you want to go to floor B.If you can’t reach floor B,printf “-1”.

Sample Input

5 1 5
3 3 1 2 5
0

Sample Output

3

思路:每次乘坐电梯有向上和向下两种情况,所以我们就分别看这两种情况是否会超出楼层范围,如果没有超出范围我们就加到队列里面,然后继续拿队首的元素进行搜索看是否到达了终点楼层,如果到了就返回次数,如果队列都空了还没有到终点那么就无法到达,返回-1。

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4;
int n,s,b;
int k[maxn],vis[maxn];
struct node{int step,h;
};
bool check(node p)
{if(p.h<=0||p.h>n||vis[p.h])  //检查是否越界或者已经访问过 return false;return true;
}
int bfs()
{memset(vis,0,sizeof(vis));  //对每组数据的vis初始化 node a,next;queue<node> q;a.step=0;a.h=s;q.push(a);vis[a.h]=1;while(!q.empty()){a=q.front();q.pop();//    cout<<"a.h="<<a.h<<" "<<a.step<<endl;if(a.h==b) return a.step;next=a;next.h=a.h+k[a.h];  //向上乘坐电梯 if(check(next)){next.step=a.step+1;  //如果符合条件就加一次 然后继续放到队列中 q.push(next);vis[next.h]=1;}next.h=a.h-k[a.h];  //向下乘坐电梯 if(check(next)){next.step=a.step+1;q.push(next);vis[next.h]=1;}}return -1;
}
int main()
{while(cin>>n){if(n==0) break;cin>>s>>b;for(int i=1;i<=n;i++) cin>>k[i];cout<<bfs()<<endl;}return 0;
}

广度优先搜索(Breadth-first search)相关推荐

  1. 深度优先搜索(Depth First Search)、广度优先搜索(Breadth First Search)

    DFS: /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visited[]为全局变 ...

  2. javascript实现的图数据结构的广度优先 搜索(Breadth-First Search,BFS)和深度优先搜索(Depth-First Search,DFS)...

    最后一例,搞得快.三天之内走了一次.. 下一步,面象对像的javascript编程. function Dictionary(){var items = {};this.has = function ...

  3. python【数据结构与算法】—广度优先搜索(Breadth-First search)

    文章目录 1.图的广度遍历 2.图的BFS原理 3.python队列实现BFS 4.迷宫的最短路径(python实现) 1.图的广度遍历 二叉树的层序遍历,本质上也可以认为是深度优先遍历. 在图中,我 ...

  4. 数据结构与算法(python):广度优先搜索(Breadth First Search,BFS)和深度优先算法(Depth First Search,DFS)

    参考自 MOOC数据结构与算法Python版 目录 一.广度优先搜索 1.1 BFS算法过程 1.2 广度优先搜索算法分析 二.深度优先搜索 2.1 骑士周游 2.1.1 问题定义 2.1.2 构建骑 ...

  5. (四)万能的搜索 —— 3. 广度优先搜索

    3. 广度优先搜索 广度优先搜索(Breadth First Search,BFS),也称为宽度优先搜索. 还是用一个二维数组来存储上一小节的迷宫. 最开始的时候小哼在迷宫(1,1)处,他可以往右走或 ...

  6. 图的遍历:广度优先搜索(BFS)

    广度优先搜索(Breadth First Search) 广度优先搜索遍历类似于树的按层序遍历 第一个结点A入队,检查与结点A相连的结点B和结点F,结点A已经处理完,将结点A出队, 检查与结点B相连的 ...

  7. 八数码深度优先搜索_深度优先搜索和广度优先搜索

    深度优先搜索和广度优先搜索 关于搜索&遍历 对于搜索来说,我们绝大多数情况下处理的都是叫 "所谓的暴力搜索" ,或者是说比较简单朴素的搜索,也就是说你在搜索的时候没有任何所 ...

  8. 常用算法2 - 广度优先搜索 深度优先搜索 (python实现)

    1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...

  9. 广度优先搜索与深度优先搜索

    广度优先搜索(宽度优先搜索,BFS)和深度优先搜索(DFS)算法的应用非常广泛,本篇文章主要介绍BFS与DFS的原理.实现和应用. 深度优先搜索 图的深度优先搜索(Depth First Search ...

最新文章

  1. 一个分号将代码效率提升100倍
  2. Hibernate---进度1
  3. react 版权问题_react使用fetch封装请求的方法-简单易懂
  4. ubunt16.04 安装3090显卡驱动 cuda cudnn pytorch
  5. 两个运放制作加法器_同相加法器电路图_反相加法器电路图_运放加法器电路图解析...
  6. aliyun gradle 代理_android studio gradle国内代理设置
  7. 程序员不满薪资拒绝offer,HR怒称:估计你一辈子就是个程序员了!
  8. 带你彻底弄明白!java实现平衡二叉树
  9. web mis系统构建
  10. 携程App的网络性能优化实践
  11. 使用bat脚本创建快捷方式
  12. lefse分析本地实现方法带全部安装文件和所有细节,保证成功。
  13. HDU 5745 La Vie en rose(DP+bitset优化)
  14. 【材料整理】 -- DTI相关知识点
  15. 没得选这件事是人生常态
  16. VTD 监视器航向角与 53-2017国标 航向角对齐
  17. WPS以及它的两种方式PIN与PBC的理解
  18. 用3句话像老太太讲清楚什么是数据库
  19. java 一元 二元 三元_一元到三元关系 二元
  20. 人民路婚纱店入驻华盛街

热门文章

  1. 售前技术支持工程师工作流程
  2. 完美的扎克伯格,倒霉的Facebook
  3. 如果你不会使用Markdown,读这个
  4. Elasticsearch整合Mysql新闻搜索
  5. android 百度地图h5,【分享】H5 地理信息定位+百度地图
  6. HDU2567:寻梦
  7. spring全方位深入探索,万分膜拜!
  8. moments音标_法语助手|法汉-汉法词典 moment是什么意思_moment的中文解释和发音_moment的翻译_moment怎么读...
  9. 神级以下必读! ~程序员学习资料(图书源码) 01
  10. 自己写小工具 让工作更简单更效率