1253:抓住那头牛

抓住那头牛

这题居然是一维的!

但是笔者窃以为难度并没有比二维的低。

由于N的取值比较大(100000),为避免全数轴确定最短路径(数值),

这里加了一个限制条件 !a[k]||a[y]<a[k] 。

这样就能有效避免多余的求值

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 using namespace std;
 5 
 6 const int N=100005;
 7 int k,a[N];
 8 queue<int> q;
 9 
10 void check(int x,int y){
11     if(x>=0&&x<N&&(!a[x]||a[x]>a[y]+1)&&(!a[k]||a[y]<a[k])){
12         a[x]=a[y]+1;
13         q.push(x);
14     }
15 }
16 void bfs(){
17     while(!q.empty()){
18         int x=q.front();
19         q.pop();
20         check(x-1,x);
21         check(x+1,x);
22         check(2*x,x);
23     }
24 }
25 int main(){
26     int n;
27     cin>>n>>k;
28     q.push(n);
29     //i表示位置,a[i]表示到位置i所需的最短时间
30     a[n]=1,bfs();
31     printf("%d\n",a[k]-1);
32     return 0;
33 }

 

posted @ 2021-08-13 18:30  Rekord  阅读(291)  评论(0编辑  收藏  举报