poj3278广搜

来源:互联网 发布:linux系统管理员招聘 编辑:程序博客网 时间:2024/05/01 02:21
import java.io.BufferedInputStream;import java.util.LinkedList;import java.util.Scanner;public class Main{public static final int MAX=200000;public static void main(String[] args){Scanner scan= new Scanner(new BufferedInputStream(System.in));if(scan.hasNext()){int n=scan.nextInt();int k=scan.nextInt();System.out.println(catchTheCow(n,k));}}public static int catchTheCow(int n,int k){if(n==k){return 0;}LinkedList queue = new LinkedList();boolean[] visited = new boolean[MAX+5];int[] minutes = new int[MAX+5];visited[n] = true;queue.add(n);while(!queue.isEmpty()){int current = (int) queue.removeFirst();for(int i=0;i<3;i++){int next=current;if(i==0){next++;}else if(i==1){next--;}else if(i==2){next<<=1;}if(next<0||next>MAX){continue;}if(!visited[next]){queue.add(next); minutes[next]=minutes[current]+1;}if(next==k){return minutes[k];}}}return 0;}}

题目的要求是求到达目标位置的最少步数,根据题目特点,很显然应该用广度优先搜索来解决。根据广度搜索的特点,广搜最先扫描到得点所需要的步数即为最小步数。
0 0
原创粉丝点击