#include <stdio.h>
#include <string.h>
int a[200005]; //队列
int b[200005]; //步数
int main ()
{
int n,k,t,i,top;
while (scanf("%d %d",&n,&k)!=EOF)
{
memset(b,0,sizeof(b));
b[n]=0;
a[0]=n;
top=1;
for (i=0;;i++) //按顺序遍历队列
{
if (a[i]==k )
{
printf ("%d\n",b[a[i]]);
break;
}
if (!b[a[i]-1] && a[i]>0)
{
b[a[i]-1]=b[a[i]]+1;
a[top++]=a[i]-1;
}
if (!b[a[i]+1] && a[i]+1<100005)
{
b[a[i]+1]=b[a[i]]+1;
a[top++]=a[i]+1;
}
if (!b[a[i]+a[i]] && a[i]<100005)
{
b[a[i]+a[i]]=b[a[i]]+1;
a[top++]=a[i]+a[i];
}
}
}
return 0;
}HDU 2717 新型bfs方法
寻找最短路径
最新推荐文章于 2021-04-13 20:45:23 发布
本文介绍了一个寻找从起点到终点最短步数的算法实现。通过使用队列存储待探索的位置,并记录每个位置到达所需的步数,该算法可以有效地找出最短路径。适用于解决简单的搜索问题。

886

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



