BFS写法为什么错啊
查看原帖
BFS写法为什么错啊
1079038
202312904502clq楼主2024/8/3 10:00
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
const int mod=32768;
int n,m,ans=0x3fffffff,vis[N];
struct node{
	int num,t;
};
void bfs(int x){
	ans=0x3fffffff;
	memset(vis,0,sizeof(vis)); 
	queue<node> q;
	q.push({x,0});
	vis[x]=1;
	while(!q.empty()){
		node tmp=q.front();
		q.pop();
		if(tmp.num>mod) continue;
		if(tmp.num==mod){
			ans=min(tmp.t,ans);
		}
		if(!vis[tmp.num*2]&&tmp.num*2<=mod){
			vis[tmp.num*2]=1;
			q.push({tmp.num*2,tmp.t+1});
		}
		if(!vis[tmp.num+1]&&tmp.num+1<=mod){
			vis[tmp.num+1]=1;
			q.push({tmp.num+1,tmp.t+1});
		}
	}
}
signed main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    
    cin>>n;
    while(n--){
    	cin>>m;
    	if(m==0) cout<<"0 ";
    	else {
    		bfs(m);
			cout<<ans<<" ";
		}
	}
    return 0;
}

2024/8/3 10:00
加载中...