AcWing 1100. 抓住那頭牛 BFS
阿新 • • 發佈:2021-02-16
技術標籤:Acwing 演算法提高課bfs演算法AcWing
農夫知道一頭牛的位置,想要抓住它。
農夫和牛都位於數軸上,農夫起始位於點N,牛位於點K。
農夫有兩種移動方式:
- 從X移動到X−1或X+1,每次移動花費一分鐘
- 從X移動到2X,每次移動花費一分鐘
假設牛沒有意識到農夫的行動,站在原地不動。
農夫最少要花多少時間才能抓住牛?
輸入格式
共一行,包含兩個整數N和K。
輸出格式
輸出一個整數,表示抓到牛所花費的最少時間。
資料範圍
輸入樣例:
5 17
輸出樣例:
4
BFS,老水題了,還是一維的。。
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; #define x first #define y second typedef pair<int,int> pii; int n,k,vis[N]; void bfs(int x){ queue<pii>q; q.push({x,0}); while(!q.empty()){ auto now=q.front(); vis[now.x]=1; q.pop(); if(now.x==k){ cout<<now.y<<endl; return; } if(now.x+1<=100000&&!vis[now.x+1]){ vis[now.x+1]=1; q.push({now.x+1,now.y+1}); } if(now.x-1>=0&&!vis[now.x-1]){ vis[now.x-1]=1; q.push({now.x-1,now.y+1}); } if(now.x*2<=100000&&!vis[now.x*2]){ vis[now.x*2]=1; q.push({now.x*2,now.y+1}); } } } int main(){ cin>>n>>k; bfs(n); return 0; }