蓝桥杯 一步之遥

题目


题目描述:

从昏迷中醒来,小明发现自己被关在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);
    				}
    			}
    		}
    	}
    
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值