

看一下宽搜的定义,是不是与题意有一些雷同之处?
这道题的题意已经很明显的指出:bfs。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+20;
int vis[maxn];
int dis[maxn];
queue<int>q;
int n,k;
int ans=0;
///bfs算法需要将所有的点先后入列,
///vis数组的作用就是确保所有的点都入过列,且不会重复入列
void bfs()
{
vis[0]=1;
q.push(0);
while(!q.empty())
{
int now=q.front();
ans=max(ans,dis[now]);
q.pop();
int nex=(now+1)%n;
if(vis[nex]==0)
{
vis[nex]=1;
dis[nex]=dis[now]+1;
q.push(nex);
}
nex=(now+k)%n;
if(vis[nex]==0)
{
dis[nex]=dis[now]+1;
vis[nex]=1;
q.push(nex);
}
}
}
int main()
{
scanf("%d%d",&n,&k);
memset(vis,0,sizeof(vis));
memset(dis,0,sizeof(dis));
bfs();
cout<<ans<<endl;
return 0;
}
本文介绍了一个基于宽度优先搜索(BFS)算法的应用实例。通过详细解释BFS算法的实现过程,包括节点遍历、距离计算等核心步骤,展示了如何解决特定问题。代码中使用了C++语言,并利用队列来跟踪节点的状态。
305

被折叠的 条评论
为什么被折叠?



