bfs(太空电梯)
http://oj.jxust.edu.cn/contest/problem?id=1563&pid=4
题目描述
公元9012年,Q博士发明了一部太空电梯,与一般电梯不同,太空电梯不能直接到达目点。太空电梯只有上升和下降两个按键,如果电梯上升,
它只能上升当前高度的距离;如果下降,它一次只能下降1米的距离。
为了使大家都能上太空去玩耍,Q博士想请你根据电梯的工作原理,计算到达目的点最少需要按几次按键
输入
多组输入
每组输入有两个数n和m(1<=n,m<=10^7),表示当前高度n和目的点m
输出
输出计算结果
样例输入
- 4 6
- 10 1
255 999999
样例输出
- 2
- 9
28
题意:电梯有两个按钮 , 一个是上升目前高度的按钮 , 另一个是下降1个高度的按钮。
如何从起始高度到达目标高度并要求求出按最少次按钮的次数。- 我一开始想的是用dfs,我就去看了下分别在什么情况下使用dfs和bfs。
dfs特点:可以不重不漏的枚举所有可以到达目标状态的路径。(回溯思想 , 枚举思想)- bfs特点:效率较高,适合于找一条最快到达目标状态的路径。(发散思想)
- //#include <bits/stdc++.h>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <iostream>
- #include <algorithm>
- #include <iostream>
- #include <cstdio>
- #include <string>
- #include <cstring>
- #include <stdio.h>
- #include <queue>
- #include <stack>
- #include <map>
- #include <set>
- #include <string.h>
- #include <vector>
- #define ME(x , y) memset(x , y , sizeof(x))
- #define SF(n) scanf("%d" , &n)
- #define rep(i , n) for(int i = 0 ; i < n ; i ++)
- #define INF 0x3f3f3f3f
- #define mod 1000000007
- using namespace std;
- typedef long long ll ;
- int n , m ;
- int vis[] , ans[];
- int bfs()
- {
- queue<int>q;
- vis[n] = ;
- q.push(n);
- if(m % == )
- {
- m++ ;
- ans[m]++;
- }
- while(!q.empty())
- {
- int x = q.front();
- q.pop();
- if(x == m)
- {
- return ans[m];
- }
- if(x* <= m && !vis[x*])
- {
- vis[*x] = ;
- ans[*x] += ans[x] + ;
- q.push(*x);
- }
- if(x - > && !vis[x-])
- {
- vis[x-] = ;
- ans[x-] += ans[x] + ;
- q.push(x-);
- }
- }
- }
- int main()
- {
- while(~scanf("%d%d" , &n ,&m))
- {
- memset(ans, , sizeof(ans));
- memset(vis , , sizeof(vis));
- if(n < m)
- cout << bfs() << endl ;
- else
- {
- cout << n - m << endl ;
- }
- }
- return ;
- }
刷题后感:标记查找过的点是bfs 和 dfs 的重要部分。
bfs(太空电梯)的更多相关文章
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- Sicily 1215: 脱离地牢(BFS)
这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...
- Sicily 1048: Inverso(BFS)
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
- Sicily 1051: 魔板(BFS+排重)
相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...
- Sicily 1150: 简单魔板(BFS)
此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...
随机推荐
- 2、dubbo基础知识
1.简介 2.dubbo架构 3.dubbo环境搭建 注意:cmd命令都是在bin目录的地址栏直接输入 xxx.cmd 4.配置dubbo-admin 步骤一: 步骤二: 步骤三: 步骤四: 步骤五: ...
- Oracle实现分页,每页有多少条记录数
分页一直都是关系数据库的热门,在数据量非常多的情况下,需要根据分页展示,每页展示多少条记录,以此减轻数据的压力; 1实现原理,根据rownum取记录数,根据公式(页数-1)*每页想要展示的记录数 AN ...
- css基础(浮动 清除f浮动)
文档流(标准流) 1.元素自上而下,自左而右 2.块元素,独占一行,行内元素在一行上显示,碰到父级元素的边框换行 浮动left 浮动的框可以向左或是向右移动,直到它的边缘碰到包含框或是另个浮动框 ...
- BZOJ2208连通数
还是挺简单的tarjan. 判断时可能重复,直接bitset搞定. 首先tarjan缩点,每个scc的内部肯定能互相到达,更一下,而且一个scc里的各个点的贡献肯定是一样的,topsort,更新答案就 ...
- Linux上Python的安装升级
1.下载 cd /usr/local/src/ wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz 2.安装,在/usr/loc ...
- python hash 每次调用结果不一样
import time import multiprocessing device = ['3695a1c7-0fa6-4fa8-a563-8fd462c04af5', '0dfdd431-f9bc- ...
- 转自网络用LIBSVM进行回归预测的粗浅认识————————作者师梦
说一说我对用LIBSVM进行回归预测的粗浅认识(整理完成于2012年5.11) 作者 : 师梦 吾本工程小硕一枚,前用matlab建模,已然完成.某日,正沾沾自喜之际,吾师曰:“汝已为之 ...
- LC 650. 2 Keys Keyboard
Initially on a notepad only one character 'A' is present. You can perform two operations on this not ...
- LC 662. Maximum Width of Binary Tree
Given a binary tree, write a function to get the maximum width of the given tree. The width of a tre ...
- NAT地址转换常用命令详解
缺省值:没有启用NAT. 命令模式:全局配置模式. 说明:静态NAT主要用于那些对需要对外部用户开放的服务,如Web服务器等,它可以把本地地址映射为指定的全局地址. 第一种格式实现的是一对一的NAT映 ...