64,649
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
struct node
{
int value;
int sign;
int step;
};
#define MAXNUM 100001
node num[MAXNUM];//node num[200008]; 根据题目条件,100001就够了
void Init()
{
for(int i=0;i<MAXNUM;i++) //for(int i=0;i<200008;i++)
{
num[i].sign=0;
num[i].step=0;
num[i].value=i;
}
}
int bfs(int sta , int end)
{
if(sta==end)
{
return 0;
}
queue <node> que;
num[sta].sign=1;
que.push(num[sta]);
while(!que.empty())
{
int x;
node temp;
temp=que.front();
que.pop();
x=temp.value;
if (x<0) continue; //added
if((x*2)<MAXNUM && num[x*2].sign==0)//if(num[x*2].sign==0)
{
num[x*2].step=num[x].step+1;
num[x*2].sign=1;
if(num[x*2].value==end)
return num[x*2].step;
que.push(num[x*2]);
}
if((x-1) < MAXNUM && num[x-1].sign==0) //if(num[x-1].sign==0)
{
num[x-1].step=num[x].step+1;
num[x-1].sign=1;
if(num[x-1].value==end)
return num[x-1].step;
que.push(num[x-1]);
}
if((x+1) < MAXNUM && num[x+1].sign==0) //if(num[x+1].sign==0)
{
num[x+1].step=num[x].step+1;
num[x+1].sign=1;
if(num[x+1].value==end)
return num[x+1].step;
que.push(num[x+1]);
}
}
return 0;//added
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);//while(scanf("%d%d",&n,&k)!=EOF) 只有一组输入,不需while
//{
//if(n>k) 不需交换
//{
//int temp=n;
//n=k;
//k=temp;
//}
Init();
printf("%d\n",bfs(n,k));
//}
return 0;
}