版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/40649851
广搜简单题
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stack>
#include <queue>
using namespace std;
int n,m;
int vis[100010];
int main ()
{
while (scanf("%d%d",&n,&m)!=EOF)
{
for (int i =0 ;i<=100003;i++)
vis[i]=0;
queue<int> q ;
q.push(n);
vis[n]=1;
int p;
while (!q.empty())
{
p=q.front();
q.pop();
if (p == m )
break;
else
{
int ans1 = p-1;
int ans2 = p+1;
int ans3 = p*2;
if (ans1 >=0 && ans1 <= 100000 && !vis[ans1])
{
vis[ans1]=vis[p]+1;
q.push(ans1);
}
if (ans2 >=0 && ans2 <= 100000 && !vis[ans2])
{
vis[ans2]=vis[p]+1;
q.push(ans2);
}
if (ans3 >=0 && ans3 <= 100000 && !vis[ans3])
{
vis[ans3]=vis[p]+1;
q.push(ans3);
}
}
}
printf("%d\n",vis[m]-1);
}
}
留言