1 solutions

  • 0
    @ 2025-3-3 16:24:11

    C++ :

    #include<stdio.h>
    #include<string.h>
    
    const int MAX = 500000 + 5;
    const int INF = 0x3f3f3f3f;
    
    int time[MAX];
    int queue[MAX];
    int bfs(int n,int k) {	
    	memset(time,INF,sizeof(time));
    	//queue<int> que;
    	//que.push(n);
    	int front,rear;
    	front = rear = 0;
    	rear++;
    	queue[front] = n;
    	time[n] = 0;
    	
    	while(front < rear) {
    		//int t = que.front();que.pop();
    		int t = queue[front];
    		front++;
    		if(t == k) break;
    		if(t >= 1 && time[t - 1] == INF) {
    			//que.push(t-1);
    			queue[rear++] = t - 1;
    			time[t-1] = time[t] + 1;
    		}
    		if(t <= k  &&  time[t * 2] == INF) {
    			//que.push(t * 2);
    			queue[rear++] = t * 2;
    			time[t * 2] = time[t] + 1;
    		}
    		if(t <= k && time[t + 1] == INF) {
    			queue[rear++] = t + 1;
    			time[t + 1] = time[t] + 1;
    		}
    	}
    	return time[k];
    }
    int main() {
    	int n,k;
    	while(~scanf("%d %d",&n,&k)) {
    		int ans = bfs(n,k);
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    

    Java :

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    
    public class Main {
    	static int[][] d = {{1,-1},{1,1},{2,0}};
    	static int[] step;
    	static boolean[] vis;
    	static final int MAX = 100005;
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while(in.hasNextInt()){
    			int m = in.nextInt();
    			int n = in.nextInt();
    			vis = new boolean[MAX];
    			step = new int[MAX];
    			System.out.println(bfs(m,n));
    		}
    	}
    
    	public static int bfs(int s, int e) {
    		Queue q = new LinkedList();
    		q.add(s);
    		vis[s] = true;
    		step[s] = 0;
    		while (!q.isEmpty()) {
    			int t = (int) q.poll();
    			if (t == e)
    				return step[t];
    			for (int i = 0; i < 3; i++) {
    				int xx = d[i][0] * t + d[i][1];
    				if (xx >= MAX || xx < 0 || vis[xx])
    					continue;
    				vis[xx] = true;
    				step[xx] = step[t] + 1;
    				q.add(xx);
    			}
    		}
    		return -1;
    	}
    }
    
    
    
    • 1

    Information

    ID
    10053
    Time
    1000ms
    Memory
    64MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By