1 solutions
-
0
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