博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1548 A strange lift
阅读量:7113 次
发布时间:2019-06-28

本文共 1530 字,大约阅读时间需要 5 分钟。

这个题可以用搜索做,因为是求最短时间,搜索则直接想到广搜(BFS)。
问题:首先告诉你有n层楼,要你求从第A层楼到第B层楼的最短时间。
限制及条件:
1、每层楼只能按上或者下,而且上或者下的楼层数是不同的,需要输入的。
2、上下楼不能到达不存在的楼层(小于1楼或者大于n楼)。
3、1<=n,A,B<=200
AC代码:
#include
#include
#include
#include
using namespace std;struct Node{ int f; int i;};int floor[210];int yn[210];int Bfs(int n, int a, int b){ Node now,next; queue
q; now.f = a; now.i = 0; q.push(now); while(!q.empty()) { now = q.front(); q.pop(); yn[now.f] = 2; //标记此楼已经到达 // printf("%d %d\n",now.f,now.i); if(now.f == b) //判断是否到达指定楼层 { return now.i; } else { next.i = now.i+1; next.f = now.f+floor[now.f]; //向上走 if(next.f > 0 && next.f <= 200 && yn[next.f] == 0) { yn[next.f] = 1; //标记此楼 q.push(next); } next.f = now.f-floor[now.f]; //向下走 if(next.f > 0 && next.f <= 200 && yn[next.f] == 0) { yn[next.f] = 1; //标记此楼 q.push(next); } } } return -1;}int main(){ int n,a,b; int i,num; while(scanf("%d",&n)&&n) { memset(yn,0,sizeof(yn)); for(i = 0; i< 210; i++) { floor[i] = 1000; } scanf("%d%d",&a,&b); for(i = 1; i <= n; i++) { scanf("%d",&floor[i]); } num = Bfs(n,a,b); printf("%d\n",num); } return 0;}

 

转载地址:http://kyghl.baihongyu.com/

你可能感兴趣的文章
css加载会造成阻塞吗?
查看>>
由一个绝对定位引发overflow:auto滚动问题产生的关于包含块(containing block)的思考...
查看>>
CS-231N-斯坦福李飞飞机器视觉课(Cydiachen版笔记+感悟)
查看>>
推荐一个有趣的Chrome扩展程序-查看任意网站的开发技术栈
查看>>
聊聊storm TridentWindowManager的pendingTriggers
查看>>
React 解决fetch跨域请求时session失效
查看>>
翻译_只需20行代码创造JavaScript模板引擎(二)
查看>>
Blockchain和Tangle哪一个是未来?
查看>>
apicloud拉起小程序并传递参数
查看>>
虚拟机Centos6.8安装MYSQL5.7,本地Navicat连接
查看>>
简单聊聊DOM
查看>>
【JavaScript】JavaScript Array 对象(数组)
查看>>
github 上有趣又实用的前端项目(持续更新,欢迎补充)
查看>>
opencv python 直方图均衡化
查看>>
HotFrameLearning 热门框架学习(前言)
查看>>
git团队开发流程
查看>>
【Under-the-hood-ReactJS-Part6】React源码解读
查看>>
深入理解css之vertical-align
查看>>
Laravel事件
查看>>
matlab绘制peano(皮亚诺)曲线和koch(科赫曲线,雪花曲线)分形曲线
查看>>