zoukankan      html  css  js  c++  java
  • POJ 3278 Catch That Cow (BFS + 队列)

    题目链接:http://poj.org/problem?id=3278


    中文题意:农户和牛在一个数轴上,农户和牛的位置分别为 n , k 。牛的位置不变,农户有三种移动方式:1.从 n 移动到 n + 1。2.从 n 移动的 n - 1。3.从 n 变成 2 * n。且每种移动方式都需要花费一分钟,问农户最少需要多久能找到他的牛。

    idea:典型 BFS + 队列 的题,每次把三种移动方式的结果入队(如果结果合法),记录从上一步到这一步的步数即可。板子题,我还废了这麽久,更加感觉到自己的弱。

     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 const int N = 1e5 + 10;
     6 int tt, ed, q[N], t[N];  // t[N]记录步数,q[N]用数组模拟队列 
     7 bool b[N];  //记录当前位置是否出现过 
     8 
     9 void bfs(int o, int k)
    10 {
    11     q[ed ++ ] = o;
    12     b[o] = true;
    13     while (tt < ed)
    14     {
    15         int flag = 0;
    16         for (int i = 0; i < 3; i ++ )
    17         {
    18             int temp;
    19             if (!i)  temp = q[tt] + 1;
    20             if (i == 1)  temp = q[tt] - 1;
    21             if (i == 2)  temp = q[tt] * 2;
    22             if (temp >= 0 && temp <= N)  //判断步数是否合法 
    23             {
    24                 if (!b[temp])
    25                 {
    26                     t[ed] = t[tt] + 1;
    27                     if (temp == k)
    28                     {
    29                         cout << t[ed] << endl;
    30                         flag = 1;
    31                         break;
    32                     }
    33                     q[ed ++ ] = temp;
    34                     b[temp] = true;
    35                 }
    36             }
    37         }
    38         tt ++ ;
    39         if (flag == 1)  break;
    40     }
    41 }
    42 
    43 int main()
    44 {
    45     int o, k;
    46     cin >> o >> k;
    47     if (o >= k)  cout << o - k << endl;  //如果 o >= k 农户只能向后走 
    48     else  bfs(o, k);
    49     return 0;
    50 }
    View Code
  • 相关阅读:
    PowerShell 学习(一):运算符
    Create word clouds with Wordle
    淘宝惊现“同店购”?
    “二叉查找树”学习
    云计算软件之——OpenNebula
    "栈"应用——求解迷宫
    "队列"学习
    “串”学习——三种表示方法
    尖端技术104之计算机技术的未来
    “二叉树”——链表表示
  • 原文地址:https://www.cnblogs.com/chuyds/p/11676422.html
Copyright © 2011-2022 走看看