分析:刚开始想的是DFS,没想到BFS还可以这样写;三种运动状态
#include <iostream>
#include <stdio.h>
#include <string>
#include<cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5+5;
bool vis[maxn];
struct node{
int pos,step;
};
int BFS(int n,int k)
{
queue<node>q;
q.push(node{n,0});
vis[n]=true;
while (!q.empty()){
node tem=q.front(); q.pop();
if(tem.pos==k) return tem.step;
for(int i=1,tx;i<=3;i++){
if(i==1) tx=tem.pos-1;
if(i==2) tx=tem.pos+1;
if(i==3) tx=tem.pos*2;
if(tx>=maxn||tx<0||vis[tx]) continue; // 0是可以到达的
vis[tx]=true;
q.push(node{tx,tem.step+1});
}
}
return 0;
}
int main()
{
int n,k;
cin>>n>>k;
memset(vis,false,sizeof(vis));
int ans=BFS(n,k);
printf("%d\n",ans);
return 0;
}