小难
2024-10-18 22:42:33
发布于:福建
8阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int N=5e7+5;
struct node{
int x,step;
};
int t,n,a,b;
bitset<N>vis;
int bfs(){
queue<node>q;
q.push({a,0});
vis.set(a);
while(!q.empty()){
node fr=q.front();
q.pop();
if(fr.x==b){
return fr.step;
}
int x1=fr.x-1,x2=fr.x+1,x3=fr.x<<1,x4=fr.x>>1;
if(x1>=0 && x1<n && !vis[x1]){
vis.set(x1);
q.push({x1,fr.step+1});
}
if(x2>=0 && x2<n && !vis[x2]){
vis.set(x2);
q.push({x2,fr.step+1});
}
if(x3>=0 && x3<n && !vis[x3]){
vis.set(x3);
q.push({x3,fr.step+1});
}
if(x4>=0 && x4<n && !vis[x4]){
vis.set(x4);
q.push({x4,fr.step+1});
}
}
}
int main(){
scanf("%d",&t);
for(int i=1;i<=t;i++){
vis.reset();
scanf("%d%d%d",&n,&a,&b);
printf("%d",bfs());
putchar(10);
}
return 0;
}
这里空空如也
有帮助,赞一个