POJ 3278 Catch That Cow (队列+bfs)
来源:互联网 发布:常见国内域名购买商 编辑:程序博客网 时间:2024/06/08 08:48
题意:
给出农夫和牛的位置,求农夫抓到牛的最短时间,农夫可以选择前进一步,后退一步,当前位置坐标变成两倍。每做出一次选择都要花费一秒、
思路:
以前是用数组做的,现在重新用队列做了一遍,vis标记的时候=打成==,结果死循环。
#include<iostream>#include<cstdio>#include<queue> #include<cstring>#define mx 100000using namespace std; struct aa{ int x,bu; aa(int x_=0,int bu_=0){ x=x_;bu=bu_; } }; queue<aa>q; int st,en,vis[100010]; int bfs(int st){ aa now; q.push(aa(st,0)); vis[st]=1; while(!q.empty()){ now=q.front(); q.pop(); int x=now.x; if(x==en) return now.bu; if(x<en){ if(x-1>=0&&vis[x-1]==0){ //cout<<"后退"<<endl; vis[x-1]=1; q.push(aa(x-1,now.bu+1)); }if(x+1<=mx&&vis[x+1]==0){//youhua //cout<<"前进"<<endl; vis[x+1]=1; q.push(aa(x+1,now.bu+1)); }if(2*x<=mx&&vis[2*x]==0){ //cout<<"两倍"<<endl; vis[2*x]=1; q.push(aa(2*x,now.bu+1)); }}else{if(x-1>=0&&vis[x-1]==0){ //cout<<"过头后退"<<endl; vis[x-1]=1; q.push(aa(x-1,now.bu+1)); }} } } int main(){ while(scanf("%d%d",&st,&en)!=EOF){ if(!q.empty()) q.pop(); memset(vis,0,sizeof(vis)); printf("%d\n",bfs(st)); } return 0; }
阅读全文
0 0
- POJ 3278 Catch That Cow 【bfs+队列】
- POJ 3278 Catch That Cow(BFS+队列)
- 【POJ】3278 - Catch That Cow(bfs,队列)
- POJ 3278 Catch That Cow (队列+bfs)
- poj 3278 Catch That Cow(bfs)
- POJ 3278 Catch That Cow (BFS)
- POJ 3278 Catch That Cow(BFS)
- POJ--3278:Catch That Cow (BFS)
- POJ 3278 - Catch That Cow(BFS)
- POJ 3278 Catch That Cow (BFS)
- POJ - 3278 - Catch That Cow (BFS)
- POJ 3278 Catch That Cow (BFS)
- POJ 3278 Catch That Cow (BFS)
- POJ 3278-Catch That Cow(bfs)
- POJ-3278-Catch That Cow(BFS)
- POJ 3278Catch That Cow(BFS)
- POJ 3278 Catch That Cow(BFS)
- poj 3278 Catch That Cow(BFS)
- 各运算符的优先级别 -- JAVA 基础
- 8月17日云栖精选夜读:用户体验再掀高潮,阿里云域名领跑用户体验
- Spring实现定时任务方法
- 常见的悬浮广告
- Spring AOP 记录日志
- POJ 3278 Catch That Cow (队列+bfs)
- 多线程访问同一资源第二步 : 线程设置 以及 线程打印 用synchronized解决数据不匹配问题
- Spark 原理及RDD理解
- 电脑wifi连接受限
- UIImageView显示动态图
- 最小花费
- CLR via C# 总结之Chap5 Primitive, Reference, and Value Types
- kubernetes2权威指南随书代码
- python datetime一些简单使用