【一维最短路模型】 抓住那头牛
传送门
题意
给定起点\(n\),终点\(k\),每一步可以从\(x\)移动到\(x+1、x-1,2\cdot x\),步数都是\(1\),从起点到终点的最小步数是多少
数据范围
\(1\leq n,k\leq 10^{5}\)
题解
-
\(bfs\)在值域上搜索即可
-
同样记录\(dist\),判重和记录移动的距离
Code
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
const int N=1e5+10;
int n,k;
int dist[N];
void bfs(int x)
{
queue<int>q;
q.push(x);
while(q.size())
{
int t=q.front();
q.pop();
rep(i,t-1,t+1)
{
int to=i;
if(i==t) to*=2;
if(to<0 || to >N) continue;
if(dist[to]) continue;
dist[to]=dist[t]+1;
if(to==k) return;
q.push(to);
}
}
}
int main()
{
scanf("%d%d",&n,&k);
bfs(n);
printf("%d\n",dist[k]);
}

浙公网安备 33010602011771号