题意:给定农夫和奶牛的初始位置,农夫可以当前位置+1、-1、*2三种移动方式,问最少需要多少分钟抓住奶牛
AC代码:
#include<cstdio> #include<cstring> #include<queue> using namespace std; const int maxn=100000+5; const int dx[]={-1,1,2}; int d[maxn]; int n,k; int bfs(){ queue<int>q; memset(d,-1,sizeof(d)); d[n]=0; q.push(n); while(!q.empty()){ int now=q.front(); q.pop(); if(now==k) return d[k]; for(int i=0;i<3;++i){ int w; if(i==2) w=now*dx[i]; else w=now+dx[i]; if(w<0||w>maxn||d[w]!=-1) continue; q.push(w); d[w]=d[now]+1; } } return -1; } int main(){ while(scanf("%d%d",&n,&k)!=EOF){ printf("%d\n",bfs()); } return 0; }
如有不当之处欢迎指出!