Question:
本体是标准的三个入口的BFS水题,但是细节问题太多
Solution:
1.数组没必要太大,一旦RE了,是因为出现了这么几种情况,出现负数,因为题中声明不会有负数的出现,把负数的情况短路掉
还有就是我们一不小心越界,这时候,我们和上一种一样,我们需要先预判短路,再进行下标访问
2.记录数组是很有必要的,防止TLE
3.小心n,k相同点额情况,此时输出结果为0,不用BFS
Code:
#include"iostream"
#include"cstdio"
#include"cstring"
#include"cstdlib"
#define N 1000000
using namespace std;
typedef struct node
{
int x;
int s;
}point;
int n,k;
int sum;
point queue[N];
int head;
int tail;
int book[N];
int main()
{
cin>>n>>k;
if(n==k) cout<<0<<endl;
else{
head=tail=1;
queue[1].x=n;
queue[1].s=0;
tail++;
memset(book,0,sizeof(book));
book[n]=1;
while(head!=tail)
{
int dx=queue[head].x+1;
int dy=queue[head].x-1;
int dz=queue[head].x*2;
if(dx==k||dy==k||dz==k)
{
sum=queue[head].s+1;
break;
}
if(dx<N&&dx>=0&&book[dx]==0)
{
book[dx]=1;
queue[tail].x=dx;
queue[tail++].s=queue[head].s+1;
}
if(dy<N&&dy>=0&&book[dy]==0)
{
book[dy]=1;
queue[tail].x=dy;
queue[tail++].s=queue[head].s+1;
}
if(dz<N&&dz>=0&&book[dz]==0)
{
book[dz]=1;
queue[tail].x=dz;
queue[tail++].s=queue[head].s+1;
}
head++;
}
cout<<sum<<endl;
}
return 0;
}