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(太空电梯)的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  3. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  4. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  5. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  6. Sicily 1048: Inverso(BFS)

    题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  9. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

随机推荐

  1. 灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?

    限时 1 秒钟给出答案,来来来,听我口令:"Java 如何获取数组和字符串的长度?length 还是 length()?" 在逛 programcreek 的时候,我发现了上面这个 ...

  2. R-ts()

    概述 ts(gm,frequency=12,start=c(1975,1)) 这个命令表示: frequency=12表明时间单位为年,而且在每一个时间单位中有12个均匀间隔的观察值. ​ 因此gm是 ...

  3. 有趣但是没有用的linux命令

    1,小火车 #yum install sl 2,黑客帝国,代码雨 # wget https://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2 ...

  4. 黑马vue---14、v-model双向绑定

    黑马vue---14.v-model双向绑定 一.总结 一句话总结: 1.v-bind 只能实现数据的单向绑定,从 M 自动绑定到 V, 无法实现数据的双向绑定 2.v-model 指令,可以实现 表 ...

  5. Windows 设置定时任务

    cmd 运行 control 命令打开控制面板,找到 管理工具 -> 任务计划程序 一.添加定时任务 创建任务 基本信息 触发器,这里设置开机启动 操作,这里执行一个程序.若为脚本,注意起始于路 ...

  6. yum源安装mysql数据库 添加密码

    学习mysql数据库时,安装的问题一直很烦恼,linux的不同版本的安装方式都可能不同,这里是我学习时的一些总结.也是刚刚开始学习,大佬勿喷,谢谢啦!!! 1.查看是否已经安装 2.如果没安装 yum ...

  7. 【React自制全家桶】三、React使用ref操作DOM与setState遇到的问题

    在React中同时使用ref操作DOM与setState常常会遇到 比如操作的DOM是setState更新之前的DOM内容,与想要的操作不一致.导致这样的原因是setState函数是异步函数. 就是当 ...

  8. Swift3.0基础语法学习<一>

    // // ViewController.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © 2016年 ...

  9. extentreports 测试报告引用extend.js/css失败

    测试工程引用extentreports 生成的测试报告,因为报告中的js和css网络不通,所以页面乱码 解决思路: 下载需要的js.css放到测试工程的static目录下 下载extentreport ...

  10. 将json文件转化为可视化

    利用python转化为可视化: python -mjson.tool