蓝桥杯 一步之遥

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Kwong_young/article/details/79407476

题目


题目描述:

从昏迷中醒来,小明发现自己被关在X星球的废矿车里。矿车停在平直的废弃的轨道上。他的面前是两个按钮,分别写着“F”和“B”。小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。按F,会前进97米。按B会后退127米。透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。或许,通过多次操作F和B可以办到。矿车上的动力已经不太足,黄色的警示灯在默默闪烁…每次进行 F 或 B 操作都会消耗一定的能量。小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方1米远的地方。

输入:

输出:

请填写为了达成目标,最少需要操作的次数。

样例输入
 
     
样例输出



思路


BFS,注意不要越界出现不合理的情况。



代码


import java.util.LinkedList;
import java.util.Queue;

public class Main {

	public static class loc {
		int x;
		int step;
		loc(){
		}
	}
	static int forward[] = { 97 , -127};
	static int pos =50000;
	static boolean vis[]=new boolean[100000];
    public static void main(String[] args) {
    	for(int i=0;i<100000;i++) {
    		vis[i]=false;
    	}
    	Queue<loc> queue =new LinkedList<loc>();
    	loc q=new loc();
    	q.step=0;
    	q.x=pos;
    	queue.add(q);
    	vis[pos]=true;
    	while(!queue.isEmpty()) {
    		loc s=queue.remove();
//			System.out.println(step);
    		if(s.x == pos+1) {
    			System.out.println(s.step);
    			return ;
    		}
    		else {
    			for(int i=0;i<2;i++) {
    				int tx=s.x+forward[i];
    				if(tx<0||tx>100000||vis[tx]) continue;
    				else {
    					vis[tx]=true;
    					loc t=new loc();
    					t.step=s.step+1;
    					t.x=tx;
    					queue.add(t);
    				}
    			}
    		}
    	}
    
    }
}

猜你喜欢

转载自blog.csdn.net/Kwong_young/article/details/79407476