zoukankan      html  css  js  c++  java
  • 抓住那只牛!Catch That Cow POJ3278 BFS

    题目链接:Catch That Cow

    题目大意

    FJ丢了一头牛,FJ在数轴上位置为n的点,牛在数轴上位置为k的点。FJ一分钟能进行以下三种操作:前进一个单位,后退一个单位,或者传送到坐标为当前位置两倍的地方。求FJ能找到牛的最短时间。

    思路

    BFS。在每一个点有三种选择,前进,后退,或者传送。要注意的是,由于有后退的过程,所以可能会造成环,导致队列长度很长就直接MLE了。因此要用一个vis数组来控制不能选择已经去过的地方。

    题解

     1 #include <iostream>
     2 #include <cstring>
     3 #include <queue>
     4 using namespace std;
     5 
     6 int n, k, ans, vis[100005];
     7 struct Location
     8 {
     9     int cur;    //当前位置坐标
    10     int num;    //到达这个点所用的步数
    11 }l;
    12 
    13 queue<Location> q;
    14 
    15 int main(int argc, char const *argv[])
    16 {
    17     cin >> n >> k;
    18     l.cur = n;
    19     l.num = 0; 
    20     q.push(l);    //初始位置入队
    21     while(true)
    22     {
    23         if(q.front().cur == k)
    24         {
    25             cout << q.front().num;    //到达K,输出
    26             break;
    27         }
    28         if(q.front().cur-1 >= 0 && vis[q.front().cur-1] == 0)    //判断是否超出范围或者已经走过
    29         {
    30             l.cur = q.front().cur-1;
    31             l.num = q.front().num+1;
    32             vis[l.cur] = 1;
    33             q.push(l);    //入队
    34         }
    35         if(q.front().cur+1 <= 100000 && vis[q.front().cur+1] == 0)
    36         {
    37             l.cur = q.front().cur+1;
    38             l.num = q.front().num+1;
    39             vis[l.cur] = 1;
    40             q.push(l);
    41         }
    42         if(q.front().cur*2 <= 100000 && vis[q.front().cur*2] == 0)
    43         {
    44             l.cur = q.front().cur*2;
    45             l.num = q.front().num+1;
    46             vis[l.cur] = 1;
    47             q.push(l);
    48         }
    49         q.pop();
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    在Mac系统下使用自己安装的PHP
    在一个文件里追加内容和换行
    Linux系统下如何去掉文件的@属性
    composer的安装和使用
    Git SSH Key 生成步骤
    自定义mysql函数时报错,[Err] 1418
    百度echarts
    linux 内存释放命令
    第二届PHP全球开发者大会(含大会的PPT)
    在CentOS上安装Java开发环境:使用yum安装jdk
  • 原文地址:https://www.cnblogs.com/SaltyFishQF/p/10293692.html
Copyright © 2011-2022 走看看