Catch That Cow(BFS)
阿新 • • 發佈:2018-12-12
【題目描述】 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點,牛位於點 農夫有兩種移動方式:
1、從 移動到 或 ,每次移動花費一分鐘
2、從 移動到 ,每次移動花費一分鐘
假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要花多少時間才能抓住牛?
【思路】 最短路模型,直接建圖跑dij會T,直接寫BFS能過
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<algorithm> using namespace std; const int maxn=200005; int n,s,t; int a[maxn]; void bfs(){ queue<int> que; que.push(s); a[s]=0; while(!que.empty()){ int x=que.front(); que.pop(); if(x==t) break; if(x-1>=0 && a[x-1]==-1){ a[x-1]=a[x]+1; que.push(x-1); } if(x+1<=n && a[x+1]==-1){ a[x+1]=a[x]+1; que.push(x+1); } if(x*2<=n && a[x*2]==-1){ a[x*2]=a[x]+1; que.push(x*2); } } } int main(){ scanf("%d%d",&s,&t); n=max(s,t)*2; memset(a,-1,sizeof(a)); bfs(); printf("%d\n",a[t]); return 0; }