POJ 3278 抓奶牛 (queue的BFS

    科技2024-11-04  14

    题目链接

    题目大意:  

      农夫抓奶牛, 有三种

    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; }

     

    Processed: 0.013, SQL: 8