初始化:
#include<bits/stdc++.h>
:这一行包含了一个标准库头文件,提供了许多标准函数和数据类型。using namespace std;
:这一行允许您在不显式指定 std::
命名空间的情况下使用标准库函数和对象。queue<int> Q;
:声明了一个名为 Q
的整数队列。bool vis[100001];
:创建了一个布尔值数组,用于跟踪已访问的节点。int st, ed;
:声明了两个整数变量 st
和 ed
。int step[100001];
:创建了一个数组,用于存储到达每个位置所需的最小步数。输入:
cin >> st >> ed;
:从输入中读取两个整数,表示起始位置和结束位置。起始位置的初始化:
Q.push(st);
:将起始位置添加到队列中。step[st] = 0;
:将起始位置的步数计数初始化为 0。vis[st] = true;
:标记起始位置为已访问。广度优先搜索 (BFS):
int x = Q.front();
:从队列中获取队头元素。Q.pop();
:从队列中移除队头元素。x
等于结束位置 (ed
),则搜索终止。x-1
是一个有效位置且未被访问过 (vis[x-1] == false
),则将其添加到队列中,并更新其步数计数。x+1
是一个有效位置且未被访问过 (vis[x+1] == false
),则将其添加到队列中,并更新其步数计数。x*2
是一个有效位置且未被访问过 (vis[x*2] == false
),则将其添加到队列中,并更新其步数计数。输出:
cout << step[ed];
:打印到达指定结束位置所需的最小步数。总之,该程序执行广度优先搜索,以找到从起始位置到结束位置所需的最小步数,考虑了三种可能的移动方式:减少 1、增加 1 或将当前位置乘以 2。step
数组跟踪每个位置的最小步数,而 vis
数组确保每个位置仅被访问一次。最终输出是到达指定结束位置所需的最小步数。
(此程序是借用老师的)