博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BFS】POJ 3278
阅读量:6943 次
发布时间:2019-06-27

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

题目:你要去抓一头牛,给出你所在的坐标和牛所在的坐标,移动方式有两种:要么前一步或者后一步,要么移动到现在所在坐标的两倍,两种方式都要花费一分钟,问你最小花费时间恰好到达牛所在的地方。
思路:BFS求最优解,移动有三种情况,前后,和移动两倍位置,不过注意的地方是,当牛的坐标比你小,你只能一步步往后倒退,这个需要特判。

#include
#include
#include
#include
using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 1010000;int d[maxn];int vis[maxn*2]; //貌似数据出了点问题?C++ WA G++就过了int N,K;bool can(int x){ if(vis[x]) return 0; if(x<0) return 0; if(x>maxn) //数组不能越界 return 0; return 1;}void bfs(int x){ queue
q; memset(vis,0,sizeof(vis)); memset(d,0,sizeof(d)); d[x]=0; vis[x] = 1; q.push(x); while(!q.empty()){ int u = q.front(); q.pop(); if(u == K){ return ; } for(int i=0;i<3;i++){ //这里三种情况,由于情况不同,所以要分别讨论 int v; if(i==0) v = u-1; else if(i==1) v = u+1; else v = u*2; if(can(v)){ d[v] = d[u]+1; q.push(v); vis[v] = 1;// printf("%d\n",v1); } } }}int main(){ while(~scanf("%d%d",&N,&K)){ if(K <= N){ printf("%d\n",N-K); //特判牛的位置比自己坐标小 continue; } bfs(N); printf("%d\n",d[K]); }}

转载于:https://www.cnblogs.com/MIKORU/p/5796747.html

你可能感兴趣的文章
简单方法恢复linux以及windows启动引导
查看>>
[转]字符集编码常识
查看>>
Spring 3 MVC Registration Form Example
查看>>
2016第4周日
查看>>
[转]How do I use variables in Oracle SQL Developer?
查看>>
win 7 IIS 配置
查看>>
Angular2入门:TypeScript的类型 - 类型、null、undefined
查看>>
STATIC变量问题
查看>>
智能Web应用实例
查看>>
C#部分方法定义
查看>>
甲基化
查看>>
关于江苏水文分析评价项目阶段总结会议
查看>>
VBS基础篇 - 运算符(4) - 比较运算符
查看>>
evernote 2.2 搜索的问题
查看>>
初学正则表达式之不可忽视的空白符
查看>>
农二代蚁族寄居大城市的代价 是不是有点太惨重了
查看>>
获取MSSQL / MYSQL的已用容量
查看>>
使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
查看>>
C#窗体读取EXCEL存入SQL数据库
查看>>
HDU 3436 Queue-jumpers
查看>>