简单的搜索,但是,hdu有一个就很不好,明明没让你多组输入,但是!!!!!!
md,就因为这个我改了一个多小时!!!!!
还有就是一个坑点,看代码吧
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N = 1e6 + 10;
int n , k , vis[N];
struct node{
int x , time;
};
void bfs()
{
queue<node>q;
while(!q.empty()){
q.pop();
}
node p , tmp;
p.x = n , p.time = 0;
vis[p.x] = 1;
q.push(p);
while(!q.empty()){
p = q.front();
if(p.x == k){//你要先判断,我一开始是在循环中判断,但是如果第一个点就是的话就gg了
printf("%d\n",p.time);
return;
}
q.pop();
for(int i = 0 ; i < 3 ; i++){
if(i == 0){
tmp.x = p.x + 1;
tmp.time = p.time + 1;
if(tmp.x >= N || tmp.x < 0 || vis[tmp.x] == 1) continue;
q.push(tmp);
vis[tmp.x] = 1;
}
if(i == 1){
tmp.x = p.x - 1;
tmp.time = p.time + 1;
if(tmp.x >= N || tmp.x < 0 || vis[tmp.x] == 1) continue;
q.push(tmp);
vis[tmp.x] = 1;
}
if(i == 2){
tmp.x = 2 * p.x ;
tmp.time = p.time + 1;
if(tmp.x < 0 || tmp.x >= N || vis[tmp.x] == 1) continue;
q.push(tmp);
vis[tmp.x] = 1;
}
}
}
}
int main()
{
while(~scanf("%d %d", &n , &k)){
memset(vis , 0 , sizeof(vis));
bfs();
}
}