当前位置: 代码迷 >> 综合 >> POJ 3278 抓奶牛 (queue的BFS
  详细解决方案

POJ 3278 抓奶牛 (queue的BFS

热度:80   发布时间:2024-02-25 18:01:53.0

题目链接

题目大意:  

  农夫抓奶牛, 有三种

1. 一分钟内从 x  到  x-1

2.一分钟内从 x  到  x+1

3.一分钟内从 x  到  x*2

问至少多少分钟抓到奶牛

解题思路:

本来想着用结构体写 写一半觉得好麻烦  又改成了用队列写 

代码如下:

#include<iostream>
#include<queue>
using namespace std;
const int maxn=1e5+1;
int n,k;
int head,tail;
bool vis[maxn];
int s[maxn];//记录步数 
queue <int> q;int bfs()
{while(!q.empty()){head=q.front();//取队首q.pop();//出队for(int i=0;i<3;i++){if(i==0)tail=head-1;if(i==1)tail=head+1;if(i==2)tail=2*head;if(tail<0||tail>=maxn)continue;if(vis[tail]==false){q.push(tail);s[tail]=s[head]+1;vis[tail]=true;}if(tail==k){return s[tail];}} } 
}
int main()
{cin>>n>>k;if(k<n){cout<<n-k<<endl;return 0;}else{q.push(n);//将n入队 s[n]=0;vis[n]=true;cout<<bfs()<<endl;}return 0;
}