搜索-G

来源:互联网 发布:刷话题软件 编辑:程序博客网 时间:2024/05/16 09:29

题目大意就是给出初始位置和终点位置,你的行走方式只有前走一步,后走一步,传送到当前坐标*2的地方;

问最少几次能到终点;


广搜问题,因为是广搜,所以一定能得到最少步数;

代码如下:

#include<iostream>#include<queue>#include<string.h>#define MAX 200005using namespace std;int v[MAX]={0},cnt;void bfs(int n,int k)     //n代表当前坐标,k代表终点{queue<int> q;q.push(n);q.push(cnt);while(1){n=q.front();q.pop();cnt=q.front();q.pop();if(n==k)return;if(n-1>=0&&!v[n-1]){q.push(n-1);q.push(cnt+1);v[n-1]=1;}if(n+1<=k&&!v[n+1]){q.push(n+1);q.push(cnt+1);v[n+1]=1;}if(2*n<=MAX&&!v[2*n]){q.push(2*n);q.push(cnt+1);v[2*n]=1;}}}int main(){int n,k;cin>>n>>k;if(n>=k)cout<<n-k<<endl;         //只能向后走,结果直接出else{cnt=0;memset(v,0,sizeof(v));bfs(n,k);cout<<cnt<<endl;}return 0;}