涉及算法:bfs
题目大意:给定两个整数n,k(n,k都是大于等于0小于等于100000),现在要把n变成k问需要多少次变化,对一个数x只能有三种操作:x+1,x-1,2*x
题目分析:三入口的bfs,x的值不可能超过200000
代码如下:
题目大意:给定两个整数n,k(n,k都是大于等于0小于等于100000),现在要把n变成k问需要多少次变化,对一个数x只能有三种操作:x+1,x-1,2*x
题目分析:三入口的bfs,x的值不可能超过200000
代码如下:
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
public class Main_3278
{
static int n,k;
static int MAX=200005;
static Queue<Integer> q=new LinkedList<Integer>();
static int[] step=new int[MAX];
static int[] used=new int[MAX];
static int next;
static int head;
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
n=in.nextInt();
k=in.nextInt();
System.out.println(bfs());
}
static int bfs()
{
q.offer(n);
step[n]=0;
used[n]=1;
while(!q.isEmpty())
{
head=q.poll();
for(int i=0;i<3;i++)
{
if(i==0) next=head+1;
if(i==1) next=head-1;
if(i==2) next=head*2;
if(next>=MAX || next<0) continue;
if(used[next]==0)
{
q.offer(next);
step[next]=step[head]+1;
used[next]=1;
}
if(next==k) return step[next];
}
}
return -1;
}
}