题解
2024-01-21 17:52:17
发布于:北京
81阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n,d[100086],k/*n为猎人初始位置 d[]为数组 k为牛的位置*/;
int main()
{
cin >> n >> k;
for(int i = 1;i <= 100000;i++) {d[i] = -1;}
d[n] = 0;
queue<int> Q/*广搜需要队列 要一层层 有顺序 先进先出*/;Q.push(n);
while(Q.size())/*根据队列长度进行循环*/
{
int r = Q.front()/*r为猎人每次接近牛的每次位置坐标*/;Q.pop();
if(r == k)/*r为猎人位置,k为牛的位置 若找到则输出并结束*/ { cout << d[k];break; }
//遍历邻居节点
if(r >= 1/*大于左边界*/ && d[r - 1] == -1) //查看r-1是否被访问过 "-1"表示没有访问过
{d[r - 1] = d[r] + 1;Q.push(r - 1);}
if(r <= 100000/*小于右边界*/ && d[r + 1] == -1) //查看r+1是否被访问过 "-1"表示没有访问过
{d[r + 1] = d[r] + 1;Q.push(r + 1);}
if(2 * r <= 100000/*小于右边界*/ && d[2 * r] == -1) //查看2*r是否被访问过 "-1"表示没有访问过
{d[2 * r] = d[r] + 1;Q.push(2 * r);}
}
return 0;
}
这里空空如也
有帮助,赞一个