zoukankan      html  css  js  c++  java
  • BFS基础思想题之“Catch That Cow”

    题目大意:

      在一个x正半轴上,给你两个点,N 代表人,K代表牛。

      牛是不会动的,要求你去抓牛,求出最小步数。

      你有三种行动方式,分别为 

          前进:坐标加一,步数加一。

          后退:坐标减一,步数加一。

          跳跃:坐标乘二,步数加一。

      其中x轴坐标限制在 [0,100000]。

      样例只有一组:5  17 --> 4

    解题思路:

      这是一道入门的BFS,主要看重培养BFS的思想。

      我们只需要一个队列就能完成这个目标。

      先将人的坐标入队,然后将三种行动的坐标都入队,

      然后判断队首元素,不符合就出队,符合就弹出循环输出队首的标记数。

      每次循环标记都要加一。

    AC代码:

      

     1 import java.util.*;
     2 import java.util.Queue;
     3 import java.util.LinkedList; 
     4 
     5 public class Main{
     6 
     7     public static void main(String[] args){
     8         Scanner sc = new Scanner(System.in);
     9         while(sc.hasNext()){
    10             int vis[] = new int[100005];
    11             Queue<Integer> map = new LinkedList<Integer>();
    12             int man = sc.nextInt();
    13             int cow = sc.nextInt();
    14             map.offer(man); vis[man] ++;
    15             while(map.size() != 0){
    16                 if(man == cow){System.out.println("0");break;}
    17                 int t = map.peek();
    18                 //System.out.println(t);
    19                 map.poll();
    20                 if(t + 1 >= 0 && t + 1 <= 100000){
    21                     if(vis[t + 1] == 0){map.offer(t + 1);vis[t + 1] = vis[t] + 1;}
    22                 }
    23                 if(t - 1 >= 0 && t - 1 <= 100000){
    24                     if(vis[t - 1] == 0){map.offer(t - 1);vis[t - 1] = vis[t] + 1;}
    25                 }
    26                 if(t * 2 >= 0 && t * 2 <= 100000){
    27                     if(vis[t * 2] == 0){map.offer(t * 2);vis[t * 2] = vis[t] + 1;}
    28                 }
    29                 if(map.peek() == cow){System.out.println(vis[cow] - 1);break;}
    30             }
    31         }
    32     }
    33 }
  • 相关阅读:
    cocos: RenderTexture 合并精灵图片
    itms-services 方式安装ipa 无法连接到网址(eg. 我用的ip:172.26.167.82)
    ios 信任自签名证书
    mac 浏览器(chrome, safari)信任自签名证书
    ##ant 打包apk
    #lua中编写shader的方式
    cocos:C++ 导出到lua, cocos2dx_extension.ini修改
    cocos:C++ 导出到lua, genbindings.py修改
    quick如何打开工程或者示例
    quick 中 "我的项目" 中的列表从那里来的?
  • 原文地址:https://www.cnblogs.com/love-fromAtoZ/p/7551315.html
Copyright © 2011-2022 走看看