1. 初始化

    • #include<bits/stdc++.h>:这一行包含了一个标准库头文件,提供了许多标准函数和数据类型。
    • using namespace std;:这一行允许您在不显式指定 std:: 命名空间的情况下使用标准库函数和对象。
    • queue<int> Q;:声明了一个名为 Q 的整数队列。
    • bool vis[100001];:创建了一个布尔值数组,用于跟踪已访问的节点。
    • int st, ed;:声明了两个整数变量 st 和 ed
    • int step[100001];:创建了一个数组,用于存储到达每个位置所需的最小步数。
  2. 输入

    • cin >> st >> ed;:从输入中读取两个整数,表示起始位置和结束位置。
  3. 起始位置的初始化

    • Q.push(st);:将起始位置添加到队列中。
    • step[st] = 0;:将起始位置的步数计数初始化为 0。
    • vis[st] = true;:标记起始位置为已访问。
  4. 广度优先搜索 (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),则将其添加到队列中,并更新其步数计数。
  5. 输出

    • cout << step[ed];:打印到达指定结束位置所需的最小步数。

总之,该程序执行广度优先搜索,以找到从起始位置到结束位置所需的最小步数,考虑了三种可能的移动方式:减少 1、增加 1 或将当前位置乘以 2。step 数组跟踪每个位置的最小步数,而 vis 数组确保每个位置仅被访问一次。最终输出是到达指定结束位置所需的最小步数。
(此程序是借用老师的)


评论
还没有评论

添加评论