Luogu题目链接:https://www.luogu.org/problem/P1588 思路 :有三种走法,x+1,x-1,x*2可以宽搜做此题 #include bits/stdc++.h using namespace std; #define maxn 1000000 int used[maxn]; struct node{ int x,t; // x记录坐标,t记录
Luogu题目链接:https://www.luogu.org/problem/P1588
思路:有三种走法,x+1,x-1,x*2 可以宽搜做此题
#include <bits/stdc++.h> using namespace std; #define maxn 1000000 int used[maxn]; struct node{ int x,t;//x记录坐标,t记录步数 }; //宽搜 int bfs(int x,int y){ queue<node> q; q.push((node){x,0}); while(!q.empty()){ node n; n=q.front(); q.pop(); for(int i=1;i<=3;i++){ node v; v.t=n.t+1; if(i==1) v.x=n.x-1;//x-1的情况 if(i==2) v.x=n.x+1;//x+1的情况 if(i==3) v.x=n.x*2;//x*2的情况 if(v.x<1||v.x>maxn) continue; if(used[v.x]) continue; if(v.x==y) return v.t;//走到了牛的位置,返回步数 used[v.x]=1; q.push(v); } } } int main(){ int n; int a,b; cin>>n; while(n--){ memset(used,0,sizeof(used));//初始化 cin>>a>>b; if(a==0) cout<<0; cout<<bfs(a,b)<<endl;} }