#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010;
int n, k;
int d[N], q[N];
void bfs()
{
int hh = 0, tt = -1;
memset(d, -1, sizeof d);
q[ ++ tt] = 0;
d[0] = 0;
while (hh <= tt)
{
auto t = q[hh ++ ];
int a = (t + 1) % n;
if (d[a] == -1)
{
d[a] = d[t] + 1;
q[ ++ tt] = a;
}
int b = (t + k) % n;
if (d[b] == -1)
{
d[b] = d[t] + 1;
q[ ++ tt] = b;
}
}
}
int main()
{
scanf("%d%d", &n, &k);
bfs();
int res = 0;
for (int i = 0; i < n; i ++ )
res = max(res, d[i]);
cout << res << endl;
return 0;
}
[蓝桥杯 2018 国 B] 调手表
最新推荐文章于 2023-03-28 21:15:29 发布
该程序使用广度优先搜索(BFS)算法来寻找环形图中任意两点间的最短路径。它首先初始化距离数组d为-1,然后通过队列进行节点遍历,更新节点间的最短距离。在主函数中,读入图的节点数n和环的大小k,最后输出所有点到起点的最短路径长度的最大值。
摘要由CSDN通过智能技术生成