额,这题很简单的bfs,我却是把数据规模看错了,导致一直A不了,可惜可惜,现在代码如下:
#include<iostream>
#include<queue>
using namespace std;
typedef struct node
{
int x;
int steps;
}node;
queue<node>q;
int N;
int K;
node s;
node e;
bool visited[100200];//看看数据规模
inline bool in(node t)
{
if(t.x>=0&&t.x<=100000)
return true;
return false;
}
int bfs()
{
while(!q.empty())q.pop();
q.push(s);
visited[s.x]=true;
while(!q.empty())
{
node f= q.front();
q.pop();
if(f.x==e.x)
return f.steps;
node t;
t.x=f.x+1;
if(in(t)&&visited[t.x]==false)
{
t.steps=f.steps+1;
visited[t.x]=true;
q.push(t);
}
t.x=f.x-1;
if(in(t)&&visited[t.x]==false)
{
t.steps=f.steps+1;
visited[t.x]=true;
q.push(t);
}
t.x=f.x*2;
if(in(t)&&visited[t.x]==false)
{
t.steps=f.steps+1;
visited[t.x]=true;
q.push(t);
}
}
}
int main(int argc, char *argv[])
{
// freopen("2717.in","r",stdin);
while(scanf("%d %d",&N,&K)!=EOF)
{
memset(visited,false,sizeof(visited));
s.x=N;
s.steps=0;
e.x=K;
int r=bfs();
printf("%d\n",r);
}
return 0;
}