博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NWPU2016][寒假作业][正常版第三组]搜索和二分 N
阅读量:5312 次
发布时间:2019-06-14

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

题意,一条数轴上,告诉你起点和终点,只能向前走1,向后走1,或者走到二倍的现在的位置,每次都耗时一分钟。问从起点到终点的最短时长。

简单地bfs

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x7fffffffusing namespace std;int n,k,a[1000010],flag[1000010];int bfs(){ queue
q; q.push(n); while(q.size()){ int p=q.front(); q.pop(); if(p==k) break; for(int i=0;i<3;i++) { if(!i&&p>0&&!flag[p-1]) { q.push(p-1); a[p-1]=a[p]+1; flag[p-1]=1; } if(i==1&&!flag[p+1]&&p+1<1000010) { q.push(p+1); a[p+1]=a[p]+1; flag[p+1]=1; } if(i==2&&!flag[p*2]&&p*2<1000010) { q.push(p*2); a[p*2]=a[p]+1; flag[p*2]=1; } } } return a[k];}int main(){ while(scanf("%d%d",&n,&k)!=EOF) { memset(a,0,sizeof(a)); memset(flag,0,sizeof(flag)); printf("%d\n",bfs()); } return 0;}

一定要flag数组,因为很有可能好几种走法都能到达终点,导致,终点被加了好几次。而最先走到的,肯定是最短的。还有每次走的时候都要判断有没有越界。。因为这个RE两次。

 

转载于:https://www.cnblogs.com/GeniusYang/p/5186333.html

你可能感兴趣的文章
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>
MySQL数据库备份工具mysqldump的使用(转)
查看>>
NTP服务器配置
查看>>
【转】OO无双的blocking/non-blocking执行时刻
查看>>
ul li剧中对齐
查看>>
关于 linux 的 limit 的设置
查看>>
模块搜索路径
查看>>
如何成为一名优秀的程序员?
查看>>
HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
查看>>
Working with Characters and Strings(Chapter 2 of Windows Via C/C++)
查看>>
vim中文帮助教程
查看>>
Android 创建与解析XML(四)—— Pull方式
查看>>
CodeForces 411B 手速题
查看>>
同比和环比
查看>>
SpringMvc拦截器运行原理。
查看>>