BFS例题--一维坐标的移动(java)
2018-02-05 17:33
232 查看
习题:一维坐标的移动
1. 在一个长度为n的坐标轴上,蒜头君想从A点 移动到B点。他的移动规则如下:
2. 向前一步,坐标增加1。
3. 向后一步,坐标减少1。
4. 跳跃一步,使得坐标乘2。
蒜头君不能移动到坐标小于0或大于n的位置。
蒜头想知道从A点移动到B点的最少步数是多少,你能帮他计算出来么?
输入格式
第一行输入三个整数n,A,B,分别代表坐标轴长度,起始点坐标,终点坐标。
(0≤A,B≤n≤50000)
输出格式
输出一个整数占一行,代表蒜头要走的最少步数。
样例输入
10 2 7
样例输出
3
1. 在一个长度为n的坐标轴上,蒜头君想从A点 移动到B点。他的移动规则如下:
2. 向前一步,坐标增加1。
3. 向后一步,坐标减少1。
4. 跳跃一步,使得坐标乘2。
蒜头君不能移动到坐标小于0或大于n的位置。
蒜头想知道从A点移动到B点的最少步数是多少,你能帮他计算出来么?
输入格式
第一行输入三个整数n,A,B,分别代表坐标轴长度,起始点坐标,终点坐标。
(0≤A,B≤n≤50000)
输出格式
输出一个整数占一行,代表蒜头要走的最少步数。
样例输入
10 2 7
样例输出
3
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class ex44 { static int n,a,b,flag=0; static int[] visit=new int[5100],temp=new int[5100]; static void bfs(int x){ Queue<Integer> q=new LinkedList<Integer>(); q.add(x); visit[x]=1;//标记 flag=0; while(!q.isEmpty()){ int t=q.poll();//移除并返回队列首部的元素,poll在队列为空时返回null int ans[]={1,-1,t};//三种坐标变化放于数组里 for(int i=0;i<3;i++){//枚举三种移动规则移动过程 int t1=t+ans[i]; if(t1<0||t1>n)//坐标小于0或坐标大于n continue; if(visit[t1]==0){//未访问的 visit[t1]=1; q.add(t1); temp[t1]=temp[t]+1; } if(t1==b){//到达终点坐标 flag=1; break; } } if(flag==1)//如果满足,结束 break; q.peek();//取出队首元素 } } public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); n=in.nextInt(); a=in.nextInt(); b=in.nextInt(); bfs(a); System.out.println(temp[b]); } }标准的BFS例题,套模板进行遍历
相关文章推荐
- 广度优先解决一维坐标移动问题java实现
- 一维坐标的移动(基础BFS)(待补)
- bfs:一维坐标的移动
- 67-一维坐标的移动
- java中怎么获取一个窗口移动后的坐标
- Java----------华为机试--------------坐标移动
- 一维坐标的移动
- 一维坐标的移动
- Java-NowCoder-坐标移动
- Java基础学习9(一维数组及在内存中的分配)
- matplotlib 可视化 —— 移动坐标轴(中心位置)
- 把Gps坐标转成百度坐标的java方法
- Web墨卡托坐标与WGS84经纬度互转 java代码
- java事件监听学习——通过键盘方向键控制小球移动
- 坐标移动
- Java带动移动商务繁荣
- java 实现文件/文件夹复制、删除、移动(二)
- 算法笔记_231:网格中移动字母(Java)
- MFC 移动控件到指定坐标
- 梁勇Java语言程序设计第三章全部例题 为第五次作业