版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
}
}
}
}
}